Tsql - 使用 max 和 group by 获取整行信息
我有一个表,其中包含以下列:
PK1 PK2 ID DATE Value flag
我进行的计算涉及取每个 ID 的最大值。
select id,
max(value)
from table
group by id
我想在我正在使用的行上标记标志。如果 id 和 max(value) 对应于多行,则标记具有最大日期的行。如果它们具有相同的 id,则 max(value) 和 max(date) 恰好标记这些行之一(不关心此时是哪一行)
有什么想法吗?
谢谢!
I have a table, with the following columns:
PK1 PK2 ID DATE Value flag
I do a calculation that involves taking the max value per ID.
select id,
max(value)
from table
group by id
I want to mark the flag on the rows that I am using. If id and the max(value) correspond to multiple rows flag the one with the max date. If they have the same id,max(value) and max(date) flag exactly one of those rows (don't care which at that point)
Any ideas?
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
对于 SQL2005+ 可能是这样的。 (假设“Mark”表示更新flag列)
For SQL2005+ maybe something like this. (Assuming that "Mark" means update the flag column)
使用 SQL Server 2005 或更高版本,您可以执行以下操作:
With SQL Server 2005 or above, you can do the following:
为什么这不起作用?
编辑:如果您不想(或在某些sql版本中不能)使用cte,则以下语句将起作用
以上将不起作用,因为正如下面马丁所说,id仍然是在列表中。
然而,如果有人不喜欢使用 cte,下面的方法将会起作用。(虽然不像 Martin 的解决方案那么优雅)
Why does this NOT work?
EDIT: the below statement WILL work if you don't want to (or can't in some sql versions) use a cte
The above will not work because, as martin says below, the id is still in the list.
however, the below will work if someone prefereds not to use a cte.(Not nearly as elegant as Martin's solution though)