【问题标题】:how to to get a record from mysql 20 consecutive days?如何连续20天从mysql获取记录?
【发布时间】:2014-08-08 11:57:08
【问题描述】:

我有一张 XX 桌。我需要获取连续 20 天间隔的记录。下面是我的表格外观

 ID    ISmen    Date
  1      0      2013-05-2 
  2      0      2013-05-2 
  3      0      2014-04-2 
  4      1      2014-05-2 
  5      1      2014-05-2 
  6      0      2014-05-2 
  7      0      2014-05-2 
  8      0      2014-05-2 
  9      1      2014-05-25 
  10     1      2014-05-25 
  11     0      2014-05-26 
  12     1      2014-05-27
  13     0      2014-05-28 

从上表中我需要得到 ismen 的记录是 1,下一个记录 ismen 也是 1(即 4,5 和 9,10 但不是 12)。还有一件事 4,5 和 9, 10应该有20天的差距

我得到的记录是 4,5 和 9,10 ..但我无法检查记录之间的日期差异。我知道我们可以在循环中实现但我试图进入 MySQL 是可能与否。我在下面尝试查询。在此先感谢您的帮助

SELECT *
FROM XX t1,
     XX t2
WHERE (t1.ID=t2.ID+1
       OR t1.ID=t2.ID-1)
  AND t1.Ismen=1
  AND t2.Ismen=1

【问题讨论】:

  • 检查这可能对你有帮助stackoverflow.com/questions/16014969/…
  • 使用 DateDiff 函数
  • 4 & 5 或 9 & 10 之间没有 20 天的间隔
  • ^ 嗯,我猜,那是 OP 问题部分(那么如何过滤这些记录)

标签: mysql sql


【解决方案1】:

|4|5| 之间有 23 天的间隔至 |9|10|但忽略样本数据精度,这个结果:

| ISMEN | T1ID | T2ID |                     T1DATE |                     T2DATE |
|-------|------|------|----------------------------|----------------------------|
|     1 |    4 |    9 | May, 02 2014 00:00:00+0000 | May, 25 2014 00:00:00+0000 |
|     1 |    5 |    9 | May, 02 2014 00:00:00+0000 | May, 25 2014 00:00:00+0000 |
|     1 |    4 |   10 | May, 02 2014 00:00:00+0000 | May, 25 2014 00:00:00+0000 |
|     1 |    5 |   10 | May, 02 2014 00:00:00+0000 | May, 25 2014 00:00:00+0000 |

由这个查询产生:

select
        t1.ismen
      , t1.id     as t1id
      , t2.id     as t2id
      , t1.`date` as t1date
      , t2.`date` as t2date
from table1 as t1
inner join table1 as t2 on t1.ismen = t2.ismen
and t1.`date` + INTERVAL 23 DAY = t2.`date`

记录之间的所需间隙可以在连接条件中定义(更改为 20 或其他)。但请注意,没有什么可以阻止 4 与 9 和 10 或 5 到 9 和 10 相关,因此您总共获得 4 条记录。

见:http://sqlfiddle.com/#!9/8d941/1

您可以通过某种方式减少该结果(例如使用 row_number() 但我不知道是否需要这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    相关资源
    最近更新 更多