我的查询
Select ID, Date, Type, TypeID, Active from TableName
结果
ID | Date | Type | TypeID | Active
------ | ----------------------- | ------ | ------ | ------
16026690| 2017-08-02 20:35:51.000 | Banana | 121 | 0
------ | ----------------------- | ------ | ------ | ------
16026695| 2017-08-02 20:43:03.000 | Banana | 121 | 0
------ | ----------------------- | ------ | ------ | ------
16026700| 2017-08-02 20:35:51.000 | Orange | 125 | 0
------ | ----------------------- | ------ | ------ | ------
16026705| 2017-08-02 20:43:03.000 | Orange | 125 | 0
------ | ----------------------- | ------ | ------ | ------
16026706| 2017-08-02 20:47:51.000 | Orange | 128 | 0
------ | ----------------------- | ------ | ------ | ------
16026706| 2017-08-02 20:50:51.000 | Orange | 128 | 0
------ | ----------------------- | ------ | ------ | ------
16026777| 2017-08-02 20:58:03.000 | Orange | 128 | 0
我想返回每个Type / TypeID的最新记录
所以我想在上表中看到的结果是:
ID | Date | Type | TypeID | Active
------ | ----------------------- | ------ | ------ | ------
16026695| 2017-08-02 20:43:03.000 | Banana | 121 | 0
------ | ----------------------- | ------ | ------ | ------
16026705| 2017-08-02 20:43:03.000 | Orange | 125 | 0
------ | ----------------------- | ------ | ------ | ------
16026777| 2017-08-02 20:58:03.000 | Orange | 128 | 0
有人能指出我正确的方向来实现这一目标吗? 我正在使用MS SQL 2016
答案 0 :(得分:4)
如PawelCz评论中所述,该链接向您显示可以使用以下内容完成:
;WITH temp AS (
SELECT
*,
ROW_NUMBER() OVER( PARTITION BY [TypeID] ORDER BY [Date] DESC) AS rownum
FROM TableName
)
SELECT
*
FROM
temp
WHERE
rownum = 1
答案 1 :(得分:2)
您可以查询如下:
Select top (1) with ties * from yourtable
Order by Row_Number() over(Partition by [TypeId] order by [Date] desc)
答案 2 :(得分:0)
TOP 1
如果您正在使用MySql,这应该可以正常工作,如果您使用SQL Server,我建议LIMIT 1
或'ROW_NUMBERS'而不是{{1}}