我正试图找出第二张表中两个条目之间的错过记录。我可以选择一个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 |
我希望每周/每月查询结束,以便按天分解缺少的条目。
答案 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;