简体   繁体   English

SQL查询,用于获取一个月中的每个第一个事件(按日期时间字段)

[英]SQL query for fetching every first event (by datetime field) in day of a month

I have table like events ( id , date , event_name , user_id ) and records like 我有类似events表( iddateevent_nameuser_id )和类似记录

(1, '2013-12-01 08:30:00', 'login', 9),
(2, '2013-12-01 08:33:00', 'login', 4),
(3, '2013-12-01 10:22:00', 'logout', 9),
(4, '2013-12-02 08:34:00', 'login', 9),
...

I need to fetch every first event for each (or specified) user in a day for every days in a month. 我需要在一个月中的每一天中每天为每个(或指定的)用户获取每个第一个事件。 for ex: 例如:

2013-12-01 08:30:00, login, 9
2013-12-02 08:34:00, login, 0
...

Help me to construct properly SQL query 帮助我正确构建SQL查询

SELECT events.*
FROM
  events INNER JOIN (SELECT user_id,
                            DATE(`date`) as day_event,
                            MIN(`date`) AS first_event
                     FROM   events
                     GROUP BY
                            user_id,
                            DATE(`date`)) fe
  ON events.user_id = fe.user_id
     AND events.`date` = fe.first_event

Please see fiddle here . 请看这里的小提琴。

If you only want to return a month, you can put your condition in your subquery: 如果只想返回一个月,则可以将条件放入子查询中:

(SELECT user_id,
        DATE(`date`) as day_event,
        MIN(`date`) AS first_event
 FROM   events
 WHERE  `date` >= '2013-12-01' AND `date` < '2014-01-01'
 GROUP BY
        user_id,
        DATE(`date`)) fe

Try this--- 尝试这个 - -

SELECT * 
FROM events 
WHERE id IN (SELECT min(id) 
             FROM events 
             GROUP BY user_id, date)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM