我可能错过了一些简单的问题。然而它像我一样忽略任何细节。但我一直在寻找一段时间,并没有遇到任何类似于我的问题。
设定: SQL 2005,存储过程。
我有一个经常通过呼叫尝试更新的表。使用UNIQUEIDENTIFIER将所有记录绑在一起,即
xxx-xxx-xxx-xxx-xxxx | 20/06/2011 12:00 | 10
我希望有一个存储过程来抓取所有记录,并通过UNIQUEIDENTIFIER对它们进行排序,同时为这些尝试生成一个计数器。即。
1111-1111-1111-1111 | 20/06/2011 12:05 | 10 | 0
1111-1111-1111-1111 | 20/06/2011 12:06 | 30 | 1
2222-2222-2222-2222 | 20/06/2011 12:10 | 120 | 0
3333-3333-3333-3333 | 20/06/2011 12:20 | 50 | 0
从上面可以很容易地识别呼叫尝试并添加号码。但是,我可能非常愚蠢。
感谢任何帮助。
此致 克里斯
答案 0 :(得分:3)
您可以使用ROW_NUMBER。
e.g。
SELECT ID, DateField, FieldA,
ROW_NUMBER() OVER(PARTITION BY ID ORDER BY DateField ASC) AS Counter
FROM YourTable
ORDER BY ID, DateField
PARTITION BY基本上重置每个不同ID的计数器,以下ORDER BY确保计数器按日期字段按递增顺序分配。请注意,这将是每次从1开始的计数器。如果你想让它从0开始,你可以在SELECT
中减去1答案 1 :(得分:0)
您是否可以在SQL中使用“group by”子句(带计数)?
您可以使用“order by”来执行排序(尽管SQL不会立即显示SQL如何实现或使用它)。
此外,问题标题似乎与您提出的问题不符。