#sql
#sql
Вопрос:
У меня есть одна таблица TestTable
с этим образцом данных:
|ID | Desc | CommentDate | qty | light
----- --------- ----------------------------- ----- --------
| A11 | EYE | 2019-01-01 01:00:00.000 | 10 | 20
| A11 | WOMEN | 2019-01-01 05:00:00.000 | 15 | 13
| A11 | SUG | 2019-01-02 00:00:00.000 | 10 | 20
| B11 | WOMEN | 2019-01-02 00:00:00.000 | 20 | 30
Я пытался получить данные сверху TestTable
. Я еще не получил фактических данных о возврате результата.
Если ID
у вас есть несколько дат комментариев, возьмите все из группы top date идентификатора. Ожидаемый результат должен быть ниже.
|ID | Desc | CommentDate | qty | light
----- --------- ----------------------------- ----- --------
| A11 | EYE | 2019-01-01 01:00:00.000 | 10 | 20
| A11 | WOMEN | 2019-01-01 05:00:00.000 | 15 | 13
| B11 | WOMEN | 2019-01-02 00:00:00.000 | 20 | 30
Комментарии:
1. Что это за база данных?
Ответ №1:
Здесь
Живой тест: https://dbfiddle.uk/?rdbms=sqlserver_2017amp;fiddle=33fd9aea8a01dcd1aca98416bcacadfd
;WITH CTE AS(
SELECT
DENSE_RANK() OVER (
PARTITION BY Id
order by convert(date, CommentDate)
) RN,
*
FROM
tbl
)
SELECT
*
FROM
CTE
WHERE RN = 1
Вывод:
RN ID Desc CommentDate qty light
1 A11 EYE 01/01/2019 01:00:00 10 20
1 A11 WOMEN 01/01/2019 05:00:00 15 13
1 B11 WOMEN 02/01/2019 00:00:00 20 30
Ответ №2:
Вы можете попробовать выполнить запрос ниже SQL, чтобы получить набор результатов.
;WITH CTE AS( SELECT [Id] ,[Desc] ,[CommentDate] ,[Qty],[Light] ,
DENSE_RANK() OVER (PARTITION BY [Desc] ORDER BY CONVERT(DATE, [CommentDate]) ASC) RN FROM TestTable )
SELECT * FROM CTE WHERE RN =1
Здесь ORDER BY [CommentDate] ASC
будет отсортирован результат по порядку ASC CommentDate
, если вы хотите записать последнюю дату, затем используйте ORDER BY [CommentDate] DESC
Комментарии:
1. Спасибо за ваш ответ, но пока не решено. Существует два типа идентификаторов, необходимо использовать каждую верхнюю дату идентификатора. Должен вернуться для A11 => A11, EYE,2019-01-01 и A11 WOMEN,2019-01-01 и B11,Women,2019-01-02 . Не должно возвращаться для A11, SUG,2019-01-02.