我有一个关于事件发生频率的表格,我希望看到每个事件的第一次和最后一次出现。假设我有三列,event_id,event_time和event_date。我知道这样的查询是错误的,并给出错误的结果:
SELECT
event_id,
MIN(event_time),
MAX(event_time),
MIN(event_date),
MAX(event_date)
FROM events_table
WHERE 1
GROUP BY event_id
有没有办法在不合并两列的情况下做到这一点?
答案 0 :(得分:2)
请更准确地考虑列类型(日期,时间,varchar ..)以及是否要在白天或之前寻找事件的发生。
您可以将这两列连接起来并最小化,最大化。
以下假定event_time如'08:03:21'和event_date('2014-01-30')出现:
SELECT id, event_id, min(concat(event_date,' ',event_time)),max(concat(event_date,' ',event_time))
from t_test
group by event_id
如果您想检查每天的第一次,最后一次出现,只需按日分组,并从concat()中删除日期。
答案 1 :(得分:1)
你忘记了
这是另一种方法。在我的MySQL上测试
SELECT a1.event_id,
Min(Concat(a2.event_date, ' ', a2.event_time)),
Max(Concat(a2.event_date, ' ', a2.event_time))
FROM event_log a1
INNER JOIN event_log a2
ON a2.event_id = a1.event_id
GROUP BY a1.event_id