В настоящее время я работаю над запросом, в котором мне нужно выделить идентификатор на основе последней созданной даты.
Вот моя диаграмма
| 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 |
Итак, моя цель - выделить ModelId, но все же показать, если LocationId is null or equals to 0, то если LocationId все тот же, получить последнюю DateCreated и показать ее в списке.
Желаемый результат:
| 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 |
Вот мой текущий SQL-запрос:
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


Вы можете попробовать запрос ниже. Союз поможет получить желаемый результат.
with cte
as
(
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
)
select ModelID, LocationId, DateCreated
from cte
where isnull(LocationId, 0) = 0
union
select ModelID, LocationId, max(DateCreated) as DateCreated
from cte
where isnull(LocationId, 0) != 0
group by ModelID, LocationId
попробуйте обновить запрос сейчас. Я не могу проверить, так как у меня нет структуры таблицы и готовых данных.
Почему мне нужно вызвать каждому столбцу в моей группе, теперь он ищет DateCreated
попробуйте еще раз... пожалуйста, поделитесь структурой таблицы с некоторыми примерами данных, чтобы я мог выполнить запрос и исправить проблемы с синтаксисом. Все столбцы, которые вы хотите выбрать, должны быть частью групповой или агрегатной функции. если у нас есть уникальные записи (modelId и locationId), то нам не нужна функция group by и max. как я и предполагал для нулевого и нулевого местонахождения сценариев.
Пожалуйста, попробуйте это.
SELECT A.* from @tbl A
INNER JOIN
(
SELECT ModelId,Max(DateCreated) As CreateDate from @tbl Group By ModelId
) As B
ON B.ModelId = A.ModelId
AND A.DateCreated = B.CreateDate
UNION
Select * from @tbl A
WHERE LocationId IS NULL OR LocationId = 0
сэр, как я могу применить таблицы для db.DeliveryCarInfo и db.DeliveryDates в вашем коде. Прости
Пожалуйста, замените это (From) "SELECT ModelId, Max (DateCreated) As CreateDate from tbl Group By ModelId" Замените на " SELECT ModelId, Max (DateCreated) As CreateDate из DeliveryCarInfo DCR INNER JOIN DeliveryDates DD ON DCR.Id = DCR.Id Group По DCR.ModelId", а также заменить tbl на "DeliveryCarInfo"
Вы можете использовать ROW_NUMBER()
SELECT ModelID, LocationId, DateCreated FROM (
SELECT
a.ModelID, a.LocationId,
CONVERT(NVARCHAR, d.DateCreated, 101) AS DateCreated,
ROW_NUMBER() OVER(PARTITION BY a.ModelID, a.LocationId ORDER BY d.DateCreated DESC) RN
FROM
db.DeliveryCarInfo a
LEFT JOIN db.DeliveryDates d ON d.DeliveryId = a.DeliveryId AND d.isDeleted = 0
WHERE
a.isDeleted = 0
) AS T WHERE RN = 1
Пожалуйста, попробуйте с кодом ниже
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
Спасибо, сэр, но это также удаление дубликата modelId, даже если его null и 0 приходят 2 значения
Поймите, обновил мой запрос, пожалуйста, используйте обновленный код
Принято как ответ, большое спасибо, сэр! застрял на этом коде уже полтора дня! действительно спасает жизнь
сэр, я попробовал это решение, но почему я получаю
ModelID is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.в группе? Это