【发布时间】:2014-03-07 15:52:11
【问题描述】:
我有一个 events 表,其中包含与这些 ID 对应的 ID (id) 和日期 (eventDate)(id 和 eventDate 不是表中唯一的列)。
SQLFiddle here。
+--------+----+---------------------+
| row_id | id | eventDate |
+--------+----+---------------------+
| 1 | 1 | 2014-02-27 23:19:41 |
| 2 | 1 | 2014-02-27 23:21:41 |
| 3 | 1 | 2014-02-27 23:21:41 |
| 4 | 2 | 2014-02-27 23:23:08 |
| 5 | 2 | 2014-02-27 23:25:08 |
| 6 | 2 | 2014-02-27 23:25:08 |
| 9 | 3 | 2014-02-28 15:36:55 |
| 8 | 3 | 2014-02-28 15:36:55 |
| 7 | 3 | 2014-02-28 15:34:55 |
| 10 | 4 | 2014-02-28 19:31:31 |
| 11 | 4 | 2014-02-28 19:33:31 |
| 12 | 4 | 2014-02-28 19:33:31 |
| 13 | 5 | 2014-02-28 19:33:34 |
| 14 | 5 | 2014-02-28 19:33:33 |
| 15 | 5 | 2014-02-28 19:31:33 |
| 16 | 6 | 2014-03-04 22:40:21 |
| 17 | 6 | 2014-03-04 22:38:21 |
| 18 | 6 | 2014-03-04 22:40:21 |
| 19 | 7 | 2014-03-04 23:08:37 |
| 20 | 7 | 2014-03-04 23:08:38 |
+--------+----+---------------------+
我只想从表中选择那些连续事件日期对于相同 ID 相同的行。
因此,我只想看到这些条目 -
+----+---------------------+
| id | eventDate |
+----+---------------------+
| 1 | 2014-02-27 23:21:41 |
| 1 | 2014-02-27 23:21:41 |
| 2 | 2014-02-27 23:25:08 |
| 2 | 2014-02-27 23:25:08 |
| 3 | 2014-02-28 15:36:55 |
| 3 | 2014-02-28 15:36:55 |
| 4 | 2014-02-28 19:33:31 |
| 4 | 2014-02-28 19:33:31 |
注意没有
| 6 | 2014-03-04 22:40:21 |
| 6 | 2014-03-04 22:40:21 |
在上面的结果中,因为它们不是连续的。
我知道我可以将 SQL 查询的输出存储在一个文件中,然后使用 unix 工具来执行此操作,但我想知道这是否可以直接通过 SQL 实现。
【问题讨论】:
-
数据在表中的位置位置是否重要?或者只是给定日期有多个条目?例如,假设您的示例的第 3 行出现在表格的最后。您是否仍想要您提供的完全相同的输出,或者您是否想忽略
id或1的行? -
@EMS,好点子。就我而言,我意识到这并不重要,但为了这个线程,假设它确实重要。
-
您可以编辑问题以反映对您而言重要的是
eventDate分组,而不是实际的位置连续重复。许多人可能知道非常有效和聪明的方法来进行分组,而位置重要性是一个不太适合数据库系统的问题(通常,并非总是如此)。 -
@EMS,实际上,我更改了问题以反映职位确实很重要。
-
什么决定了记录在输出中的排序方式。您似乎应该能够轻松地更改它们是否“连续”使用您未共享的其他键列或其他属性。