试图找到两个条目之间缺少的记录

时间:2017-04-12 11:15:49

标签: mysql sql mariadb

我正试图找出第二张表中两个条目之间的错过记录。我可以选择一个ID并向后工作(后面的例子),但需要更动态的东西。

我的'人'列表:

id |name    |
---|--------|
1  |Seth    |
2  |Richard |
3  |Jacob   |
4  |Kate    |

另一张表中的'条目'相互矛盾。

id |peopleid |entry_date          |
---|---------|--------------------|
1  |1        |2017-04-12 07:19:44 |
2  |2        |2017-04-12 10:01:44 |
3  |3        |2017-04-12 10:03:00 |
4  |4        |2017-04-12 10:04:00 |
6  |1        |2017-04-13 17:06:00 |
7  |2        |2017-04-13 17:07:00 |
8  |4        |2017-04-13 18:09:00 |
9  |1        |2017-04-13 20:01:00 |
10 |1        |2017-04-13 22:03:00 |
11 |1        |2017-04-14 23:21:00 |

在Seths第一次进入2017-04-12 07:19和他的第二次进入2017-04-13 17之间我在“人物”表中为每个人捕获了一条记录,所以一切都很顺利。

但是,在2017-04-13 17:06和2017-04-14 08:09的Seths参赛作品之间我只有理查德(2)和凯特(4)的数据所以需要它报道雅各布的(3)进入不见了。

在Seth最后的滑动(ID 9,10和11)之间,没有其他人的数据被捕获,他们需要报告。

到目前为止,我在2017-04-13 17:06和2017-04-14 08:09之间的Seths条目中有这个 - 要做到这一点,我需要结束日期/记录并使用ID向后工作:

SELECT *
FROM people
WHERE id NOT IN (
SELECT peopleid FROM entries e 
WHERE id >= (
    SELECT id
    FROM entries e
    WHERE id < 9 AND peopleid = 1
    ORDER BY id DESC
    LIMIT 1
) AND id < 9
)

给了我

id |name  |
---|------|
3  |Jacob |

我希望每周/每月查询结束,以便按天分解缺少的条目。

2 个答案:

答案 0 :(得分:1)

尝试这样的事情。我们的想法是首先进行交叉连接,将每个人与每个可能的日期联系起来,并且只选择那些entries - 表中没有相应条目的行。希望它能够正常工作,而无需纠正许多语法问题:

select *
from people p join (select distinct date(entry_date) as day from entries) dates
where not exists
  (select * from entries e
   where p.id = e.people_id and dates.day = date(e.entry_date))

答案 1 :(得分:0)

试试这个并改变&#34;?&#34;与你想要检查的日期,(即2017-04-13)

SELECT p.* FROM people p 
LEFT JOIN entries e on e.peopleid = p.id AND DATE(entry_date) = ?
WHERE  e.peopleid IS NULL;

SELECT p.* FROM people p 
    LEFT JOIN entries e on e.peopleid = p.id  AND DATE(entry_date) = '2017-04-13'
    WHERE  e.peopleid IS NULL;