我有一个 events
表,其中包含 ID (id
) 和与这些 ID (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 实现。
最佳答案
虽然我的 mySql 有点生疏,但应该能够利用一个组来完成此任务。
SELECT t.*
FROM (
SELECT
id,
eventDate,
COUNT(0) AS numRows
FROM tabl
GROUP BY id, DATE(eventDate)
HAVING COUNT(0) > 1
ORDER BY eventDate
) t
然后,如果您需要额外的列,您只需将这个相关子查询连接回原始表即可。
关于MySQL - 检查连续列是否相同并仅显示那些行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22254663/