【发布时间】:2013-10-24 09:18:43
【问题描述】:
我被困在下面的 sql 查询中。 我有一张桌子:
id | C1 | C2 | date
1 | 1 | 1 | 1/10/2010 9:30:10
2 | 1 | 1 | 1/10/2010 9:31:10
3 | 1 | 1 | 1/10/2010 9:32:10
4 | 1 | 1 | 1/10/2010 9:37:10
5 | 1 | 2 | 1/10/2010 9:38:10
6 | 2 | 3 | 1/10/2010 9:39:10
7 | 2 | 3 | 1/10/2010 9:45:10
8 | 2 | 3 | 1/10/2010 9:46:10
现在我想获取如下记录:
按 5 分钟的日期差异(最新日期)以及相同的 C1 和相同的 C2 对记录进行分组
(即同一 C1 的每个 C2 的 5 分钟内的 latset 日期等记录)。
我只希望输出为:
id | C1 | C2 | date
3 | 1 | 1 | 1/10/2010 9:32:10
4 | 1 | 1 | 1/10/2010 9:37:10
5 | 1 | 2 | 1/10/2010 9:38:10
6 | 2 | 3 | 1/10/2010 9:39:10
7 | 2 | 3 | 1/10/2010 9:46:10
解释:
1. 前 3 条记录被分组(5 分钟内相同的 C1 和相同的 C2)和第 3 条记录(这 3 条中的最新)。
2. 获取第 4 条记录。 (这是相同 C1 和相同 C2 向后 5 分钟和向前 5 分钟内的唯一记录)。
3. 同上
同样高达...第 8 条记录。
我尝试了各种分组和查询分区,但被卡住了。任何帮助,将不胜感激。谢谢你
【问题讨论】:
-
“5 分钟内”是什么意思?前 3 个是否因为 1 和 3 之间的差异小于 5 分钟而分组?还是 1 和 2 以及 2 和 3 之间的区别?还是因为它们都在 9:30 和 9:35 之内?
-
是的,因为它们都在 9:30 和 9:35 之间(5 分钟内)。
-
好的,分组 (9:30
-
是的,但在第一种情况下,9:30 的一行在 9:31 与另一行分组,而在第二种情况下,它不会(因为它将在 9:29 与另一行分组)。
标签: sql sql-server tsql group-by