I want to display car reviews by authors.... a car may be reviewed by multiple authors.... but the latest entry should be displayed... the older enteries will not be displayed....
the following is the query
[code]
SELECT CarReviews.Date AS Date, CarReviews.Company AS Company, CarReviews.Name AS Reviewer, CarMake.MakeName, CarModel.ModelName,
CarModel.YearName, CarMake.KeyName + '/' + CarModel.Image AS Image, CarReviews.Id AS Id
FROM CarReviews INNER JOIN
CarMake ON CarReviews.MakeId = CarMake.Id INNER JOIN
CarModel ON CarReviews.ModelId = CarModel.Id
GROUP BY CarMake.MakeName, CarModel.ModelName, CarModel.YearName, CarMake.KeyName + '/' + CarModel.Image, CarReviews.Id, CarReviews.Name,
CarReviews.Company, CarReviews.Date
ORDER BY CarReviews.Date DESC
[/code]
Results of above statement....
Date Company Reviewer MakeName ModelName YearName Image Id
----------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------- ----------------------------------------------------------- -----------
10/3/2005 5:12:25 PM LATimes.com Dan Neil MINI Cooper S 2005 RAJ-0122/RAJ-0122-82.jpg 8
10/3/2005 5:11:41 PM Star-Telegram.com G. Chambers Williams III MINI Cooper S 2005 RAJ-0122/RAJ-0122-82.jpg 7
10/3/2005 4:51:31 PM MotoFlare.com Joe Wiesenfelder MINI Cooper S 2005 RAJ-0122/RAJ-0122-82.jpg 6
10/3/2005 4:49:22 PM MotoFlare.com Jim Flammang MINI Cooper S 2005 RAJ-0122/RAJ-0122-82.jpg 5
10/1/2005 4:19:25 PM MotoFlare.com Erphan Rajput Audi A4 (2005.5) 2005 RAJ-0089/RAJ-0089-80.jpg 3
10/1/2005 4:19:25 PM MotoFlare.com Jim Flammang Audi A4 (2005.5) 2005 RAJ-0089/RAJ-0089-80.jpg 4
Problem is repeation...
In the above statement .... the statement should return only 2 records... but it is displaying 6 records....
record one should be of MINI Cooper S 2005 & second should be of Audi A4 (2005.5) 2005
Urgent reply will be highy appreciated...
Thanks,
Erphan Rajput..

Need help in grouping ....
bluedesert1001
take out CarReviews.Date and CarReviews.Names fields
What you need to do is create this query only returning the rows you want to group by.
The create another query that joins this query and provides the other fields you need to see.
Dato
Thanks....
this is the final query...
SELECT CarMake.MakeName, CarModel.ModelName, CarModel.YearName, CarMake.KeyName + '/' + CarModel.Image AS Image, CarReviews.Company, CarReviews.Name AS Reviewer, CarReviews.Id
FROM CarReviews INNER JOIN
CarMake ON CarReviews.MakeId = CarMake.Id INNER JOIN
CarModel ON CarReviews.ModelId = CarModel.Id
WHERE CarReviews.Date In (SELECT MAX(CarReviews.Date) AS Date
FROM CarReviews INNER JOIN
CarMake ON CarReviews.MakeId = CarMake.Id INNER JOIN
CarModel ON CarReviews.ModelId = CarModel.Id AND CarMake.Id = CarModel.MakeId
GROUP BY CarMake.MakeName, CarModel.ModelName)
the bold SQL will return the Latest dates of every car.... rest of the statement will return all the records....
Your help 'Lee_Dale' really helped me solving the problem....
Thanks & Goodbye
Erphan Rajput.
sekhar_16
Mattyv
MINI Cooper S
Audi A4
and second query will get the rest of the fields...
....
one thing ... how should i join these two queries....
THanks....
Erphan Rajput
Jereck
I have tried the modified query ...
Server: Msg 144, Level 15, State 1, Line 6
Cannot use an aggregate or a subquery in an expression used for the group by list of a GROUP BY clause.
this error occurs when i try to run this command...
the error line is highlighted... i think the error is in MAX(CarReviews.Id)... in Groupby clause...
SELECT CarReviews.Date AS Date, CarReviews.Company AS Company, CarReviews.Name AS Reviewer, CarMake.MakeName, CarModel.ModelName,
CarModel.YearName, CarMake.KeyName + '/' + CarModel.Image AS Image, MAX(CarReviews.Id) AS Id
FROM CarReviews INNER JOIN
CarMake ON CarReviews.MakeId = CarMake.Id INNER JOIN
CarModel ON CarReviews.ModelId = CarModel.Id
GROUP BY CarMake.MakeName, CarModel.ModelName, CarModel.YearName, CarMake.KeyName + '/' + CarModel.Image, MAX(CarReviews.Id), CarReviews.Name,
CarReviews.Company, CarReviews.Date
ORDER BY CarReviews.Date DESC
Thanks,
Erphan Rajput
Fredrik Wassberg
e.g.
SELECT MAX(CarReviews.Date) AS Date, CarMake.MakeName, CarModel.ModelName,
CarModel.YearName, CarMake.KeyName + '/' + CarModel.Image AS Image
FROM CarReviews INNER JOIN
CarMake ON CarReviews.MakeId = CarMake.Id INNER JOIN
CarModel ON CarReviews.ModelId = CarModel.Id
GROUP BY CarMake.MakeName, CarModel.ModelName, CarModel.YearName, CarMake.KeyName + '/' + CarModel.Image
pxcosis
SELECT CarReviews.Date AS Date, CarReviews.Company AS Company, CarReviews.Name AS Reviewer, CarMake.MakeName, CarModel.ModelName,
CarModel.YearName, CarMake.KeyName + '/' + CarModel.Image AS Image, MAX(CarReviews.Id) AS Id
FROM CarReviews INNER JOIN
CarMake ON CarReviews.MakeId = CarMake.Id INNER JOIN
CarModel ON CarReviews.ModelId = CarModel.Id
GROUP BY CarMake.MakeName, CarModel.ModelName, CarModel.YearName, CarMake.KeyName + '/' + CarModel.Image, MAX(CarReviews.Id), CarReviews.Name,
CarReviews.Company, CarReviews.Date
ORDER BY CarReviews.Date DESC
Cant test this so not sure it will work but the basic problem is you are grouping by too many fields so it is returning a record for each entry into the table rather than the last entry.
Larry G.
Answer Re: Get latest purchase of each vender
There are many ways to do this.
-- any version of SQL Server / ANSI SQL
select b1.VInvoiceID, b1.Date, b1.VenderID
from BuyingTable as b1
where b1.Date = (select max(b2.Date)
from BuyingTable as b2
where b2.VenderID = b1.VenderID);
-- SQL Server 2005 specific/ANSI SQL
select b2.VInvoiceID, b2.Date, b2.VenderID
from (
select b1.VInvoiceID, b1.Date, b1.VenderID, ROW_NUMBER() OVER(PARTITION BY b1.VenderID ORDER BY b1.Date DESC) as OrderSeq
from BuyingTable as b1
) as b2
where b2.OrderSeq = 1;
-- Same as above using CTE instead of derived table
with b2
as
(
select b1.VInvoiceID, b1.Date, b1.VenderID, ROW_NUMBER() OVER(PARTITION BY b1.VenderID ORDER BY b1.Date DESC) as OrderSeq
from BuyingTable as b1
) as b2
select b2.VInvoiceID, b2.Date, b2.VenderID
from b2
where b2.OrderSeq = 1;
-- SQL Server 2005 specific. Same as query #1
select b2.VInvoiceID, b2.Date, b2.VenderID
from (select b.VenderID, max(b.Date) as Latest
from BuyingTable as b
group by b.VenderID) as b1
cross apply (select b2.*
from BuyingTable as b2
where b2.VenderId = b1.VenderId
and b2.Date = b1.Latest) as b2;
Answer Re: Doing a SELECT on a different field than the field in the GROUP BY
I posted few queries that show how to do this for a similar problem. Please see the thread titled "Get latest purchase of each vender". Here are few queries:
-- Works from SQL70 onwards:
select t1.*
from tblSaleAddresses as t1
where t1.AddressId = (select top 1 t2.AddressId
from tblSaleAddresses as t2
where t2.SaleID = t1.SaleID
and t2.DateEffective <= CURRENT_TIMESTAMP
order by t2.DateEffective DESC)
and t1.DateEffective <= CURRENT_TIMESTAMP;
-- SQL2005 specific:
select t2.*
from (
select t1.*
, ROW_NUMBER() OVER(PARTITION BY t1.SaleID
ORDER BY t1.DateEffective DESC
, t1.AddressID DESC) as AddrSeq
from tblSaleAddresses as t1
where t1.DateEffective <= CURRENT_TIMESTAMP
) as t2
where t2.AddrSeq = 1;
-- ANSI SQL query
select t1.*
from tblSaleAddresses as t1
join (
-- I concatenate date & id as binary data and take MAX on that first
-- then you can parse the address id of the max value
-- this works for positive values of AddressId and Date
-- you can character values that sorts correctly also.
select cast(right(max(cast(convert(char(8), t2.DateEffective, 112) as binary(8))
+ cast(t2.AddressID as binary(4))), 4) as int)
from tblSaleAddresses as t2
where t2.DateEffective <= CURRENT_TIMESTAMP
group by t2.SaleID
) as t3(AddressId)
on t3.AddressId = t1.AddressId;
Maturin
PProg
in the following query i have removed some fields... even now i am getting the repeation....
SELECT MaX(CarReviews.Date) AS Date, CarReviews.Company AS Company, CarReviews.Name AS Reviewer, CarMake.MakeName, CarModel.ModelName,
CarModel.YearName
FROM CarReviews INNER JOIN
CarMake ON CarReviews.MakeId = CarMake.Id INNER JOIN
CarModel ON CarReviews.ModelId = CarModel.Id
GROUP BY CarMake.MakeName, CarModel.ModelName, CarModel.YearName, CarReviews.Name, CarReviews.Company,
CarReviews.Date
DATE Company Author Car Name w/ Model and Year
2005-10-01 MotoFlare.com Erphan Rajput Audi A4 (2005.5) 2005
2005-10-01 MotoFlare.com Jim Flammang Audi A4 (2005.5) 2005
2005-10-03 LATimes.com Dan Neil MINI Cooper S 2005
2005-10-03 Star-Telegram G. Chambers Williams III MINI Cooper S 2005
2005-10-03 MotoFlare.com Jim Flammang MINI Cooper S 2005
2005-10-03 MotoFlare.com Joe Wiesenfelder MINI Cooper S 2005
Thanks....
SohanKamat
bpfh
now
this query returns 2 cars with latest review's date...
SELECT MAX(CarReviews.Date) AS Date, CarMake.MakeName, CarModel.ModelName
FROM CarReviews INNER JOIN
CarMake ON CarReviews.MakeId = CarMake.Id INNER JOIN
CarModel ON CarReviews.ModelId = CarModel.Id AND CarMake.Id = CarModel.MakeId
GROUP BY CarMake.MakeName, CarModel.ModelName
RESULTS:
---------
2005-10-01 16:19:25.357 Audi A4 (2005.5)
2005-10-03 17:12:25.373 MINI Cooper S
SECOND Query:
--------------
SELECT CarMake.MakeName, CarModel.ModelName, CarModel.YearName, CarReviews.*
FROM CarReviews INNER JOIN
CarMake ON CarReviews.MakeId = CarMake.Id INNER JOIN
CarModel ON CarReviews.ModelId = CarModel.Id
This query returns all the records....
Now tell me how should i join these two queries....
Thanks,
Erphan Rajput...