MySQL:选择在日期范围内的行

3

我有一个类似以下的MySQL:

Events
+----+------+--------------------------------+
| id | name | sites_id | created             |
+----+------+--------------------------------+
| 1  | test | 1        | 2013-11-01 00:00:00 |
| 2  | test | 1        | 2013-11-02 00:00:00 |
| 3  | test | 2        | 2013-11-13 00:00:00 |
| 4  | test | 3        | 2013-11-14 00:00:00 |
| 5  | test | 4        | 2013-11-25 00:00:00 |
+----+------+----------+---------------------+

我想选择48小时内创建的具有相同站点ID的事件(在这个示例中,我期望ID为1和2)。

非常感谢您的帮助,因为我不知道如何仅使用SQL完成此操作。

谢谢。


1
你目前尝试了什么? - Suresh Kamrushi
1
如果您有一个“事件链”,但不是所有事件都在48小时内发生,例如11-01、11-02、11-03、11-04、11-05,那么您会怎么处理呢? - Bart Friederichs
嗨,巴特,不需要链式。 - Kinetic
1
@OliverRidgway 那么你从哪里开始? - Bart Friederichs
2
@OliverRidgway:你能提供一下你的样本数据以及你所期望的输出结果吗? - Suresh Kamrushi
显示剩余2条评论
4个回答

5
尝试像这样做:
SELECT DISTINCT e1.*
FROM events e1
INNER JOIN events e2 ON e1.sites_id = e2.sites_id
  AND e1.id <> e2.id
WHERE ABS(datediff(e1.created, e2.created)) <= 2;

sqlfiddle演示

这将给您结果:

ID  NAME    SITES_ID    CREATED
2   test    1           November, 02 2013 00:00:00+0000
1   test    1           November, 01 2013 00:00:00+0000

感谢Filipe,这是最简洁的。 - Kinetic

3

我没有进行语法检查(因此请将其视为指南):

SELECT DISTINCT
    t1.id
    , t1.name 
    , t1.sites_id 
    , t1.created
FROM
    Events t1
    INNER JOIN Events t2
        ON (t2.created BETWEEN DATE_ADD(t1.created, INTERVAL -2 DAY) AND DATEADD(DAY, INTERVAL 2 DAY))
        AND t1.sites_id = t2.sites_id
        AND t1.id <> t2.id 

0

请看这里:

SELECT * FROM table WHERE table.created > DATE_SUB(table.created, INTERVAL 48 HOUR) GROUP BY sites_id HAVING count(*) > 1;

这并没有解决问题:“选择在彼此创建时间相差不超过48小时的事件”。您选择了在当前时间往前48小时内的事件。 - AgRizzo

0
你可以这样做:
Select m.id,m.created from TPS_info m, tps_info c 
where c.created between m.created AND date_add(m.created, INTERVAL 43200 MINUTE)
group by m.id,m.sites_id

SQL演示:http://sqlfiddle.com/#!2/bce0c/2


@Oliver Ridgway:我更新了我的帖子,现在它完美地运行了。还包括fiddle演示链接。 - Suresh Kamrushi
这并没有解决问题,“选择在48小时内创建且具有相同站点ID的事件”。 - Harsh Gupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接