如何使用SQL语句从下面的数据中检索数据

时间:2019-04-17 03:27:30

标签: 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有多个评论日期,请从ID的组最高日期中提取全部评论日期。 预期结果应该在下面。

|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

2 个答案:

答案 0 :(得分:0)

您可以尝试在下面的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将按照CommentDate的ASC顺序对结果进行排序。如果要记录最后的日期,请使用ORDER BY [CommentDate] DESC

答案 1 :(得分:0)

这里

实时测试:https://dbfiddle.uk/?rdbms=sqlserver_2017&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
相关问题