我有一个表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
答案 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