试图在两个条目之间找到丢失的记录

Trying to find missing records between two entries

我想在一秒钟内找出两个条目之间遗漏的记录 table。我可以通过选择一个 ID 并向后工作(稍后举例)来做到这一点,但需要更动态的东西。

我的 'people' 名单:

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

并在另一个 table 中对应 'entries'。

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 |

Seth 在 2017-04-12 的第一个条目 07:19 和他在 2017-04-13 的第二个条目之间 17 我在 "people" table 中为每个人捕获了一条记录, 所以一切都很好。

但是,在 2017-04-13 17:06 和 2017-04-14 08:09 之间的 Seths 条目之间,我只有 Richard(2) 和 Kate(4) 的数据,所以需要它报告 Jacob 的 (3) 条目丢失。

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

到目前为止,我有这个用于 2017-04-13 17:06 和 2017-04-14 08:09 之间的 Seths 条目 - 为此我需要结束 date/record 并使用向后工作的 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 |

我希望结束 week/month 查询以按天分解丢失的条目。

试试这个并更改“?”使用您希望它检查的日期(即 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;

尝试这样的事情。这个想法是首先创建一个交叉连接,将每个人与每个可能的日期连接起来,其中 select 只有那些在 entries-table 中没有相应条目的行存在。希望它可以在不必更正许多语法问题的情况下工作:

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))