Как извлечь данные из нижеприведенных данных с помощью инструкции SQL

#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.