I’m currently working on a query where I need to distinct ID based on the latest date created.
Here is my diagram
x
| ID | ModelID | LocationId | DateCreated |
|------+----------------+-----------------+---------------|
| 1 | 1 | 5 | 02/03/2019 |
| 2 | 2 | null | 01/14/2019 |
| 3 | 2 | 0 | 02/03/2019 |
| 4 | 2 | 5 | 12/30/2018 |
| 5 | 4 | 3 | 01/10/2019 |
| 6 | 3 | 5 | 02/14/2019 |
| 7 | 2 | 5 | 03/13/2019 |
So my goal is to Distinct ModelId
but still show if the LocationId is null or equals to 0
then if LocationId
is still the same, Get the Latest DateCreated
and show it to the List
Desired output:
| ID | ModelID | LocationId | DateCreated |
+------+----------------+-----------------+---------------+
| 1 | 1 | 5 | 02/03/2019 |
| 2 | 2 | null | 01/14/2019 |<-still show
| 3 | 2 | 0 | 02/03/2019 |<-still show
| 4 | 2 | 5 | 03/13/2019 |<-The Latest
| 5 | 4 | 3 | 01/10/2019 |
| 6 | 3 | 5 | 02/14/2019 |
Here is my current SQL query:
SELECT
a.ModelID, a.LocationId,
(SELECT TOP 1
CONVERT(NVARCHAR, DateCreated, 101)
FROM
db.DeliveryDates
WHERE
isDeleted = 0
AND DeliveryId = a.DeliveryId) AS DateCreated,
FROM
db.DeliveryCarInfo a
WHERE
a.isDeleted = 0
Advertisement
Answer
Please Try with below code
DECLARE @DeliveryCarInfo TABLE (id int,modelId int,locationId int null,DateCreated date)
INSERT INTO @DeliveryCarInfo
(
id,
modelId,
locationId,
DateCreated
)
VALUES
(1 ,1 ,5,'02/03/2019'),
(2 ,2 ,null,'01/14/2019'),
(3 ,2 ,0,'02/03/2019'),
(4 ,2 ,5,'12/30/2018'),
(5 ,4 ,3,'01/10/2019'),
(6 ,3 ,5,'02/14/2019'),
(7 ,2 ,5,'03/13/2019')
Select X.Id,X.modelId,X.locationId,X.DateCreated from (SELECT *,row_number() OVER (PARTITION by modelId,locationId ORDER BY dateCreated desc)R FROM @DeliveryCarInfo
)X
WHERE X.R=1
ORDER BY X.modelId,X.DateCreated