我有如下所示的表格...如何根据changeno仅选择id的最新数据?
+----+--------------+------------+--------+
| id | data | changeno | |
+----+--------------+------------+--------+
| 1 | Yes | 1 | |
| 2 | Yes | 2 | |
| 2 | Maybe | 3 | |
| 3 | Yes | 4 | |
| 3 | Yes | 5 | |
| 3 | No | 6 | |
| 4 | No | 7 | |
| 5 | Maybe | 8 | |
| 5 | Yes | 9 | |
+----+---------+------------+-------------+
我想要这个结果...
+----+--------------+------------+--------+
| id | data | changeno | |
+----+--------------+------------+--------+
| 1 | Yes | 1 | |
| 2 | Maybe | 3 | |
| 3 | No | 6 | |
| 4 | No | 7 | |
| 5 | Yes | 9 | |
+----+---------+------------+-------------+
我目前有这个 SQL 语句...
SELECT id, data, MAX(changeno) aschangeno FROM Table1 GROUP BY id;
显然它没有返回我想要的。由于聚合函数的原因,这应该返回错误。如果我在 GROUP BY 子句下添加字段,它可以工作,但不会返回我想要的内容。 SQL 语句是迄今为止我能想到的最接近的语句。如果有人能在这方面帮助我,我将不胜感激。先感谢您 :)
这通常被称为问题。在 SQL Server 2005 及更高版本中解决此问题的一种方法是使用具有计算值的 CTEROW_NUMBER()
基于的分组id
列,并按最大排序changeno
first:
;WITH cte AS
(
SELECT id, data, changeno,
rn = ROW_NUMBER() OVER (PARTITION BY id ORDER BY changeno DESC)
FROM dbo.Table1
)
SELECT id, data, changeno
FROM cte
WHERE rn = 1
ORDER BY id;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)