我在尝试构造查询结构以允许我进行“重置”并仅在重置后才对记录进行计数方面遇到了麻烦。
基本结构
Log Table
ID | Date | Time | SectorID | personnumber
1 | 2020-02-10 | 13:23:00 | 23 | 66 (This is a row to be counted)
2 | 2020-02-10 | 13:28:00 | 38 | 66 (This is a row to be counted)
3 | 2020-02-10 | 13:30:00 | 5 | 66 (This is a 'reset' row) (SectorID 5 is a reset)
4 | 2020-02-10 | 13:38:00 | 12 | 66 (This is a row to be counted)
5 | 2020-02-10 | 13:42:00 | 56 | 66 (This is a row to be counted)
对于上面的记录,有2条记录,然后进行了重置(由扇区ID 5指示),然后又有2条记录(其他记录可以是5以外的任何其他数字)。
所以我想让'count'返回2
下面的查询是我用于计数所有记录而没有任何重置功能的内容
SELECT
personnumber,
count(*) as occurrences
FROM log
WHERE personnumber IS NOT NULL
AND sectorid != 5
GROUP BY personnumber
HAVING count(*) > 1
ORDER BY occurrences DESC, personnumber
这将返回
Personnumber | Occurrences
66 | 4
我希望这足以说明我的问题。任何帮助将非常感激。谢谢乔恩
您可以使用sectorId
和personnumeber
联接同一张表,以便计算此id之后的所有记录:
SELECT
l.personnumber,
COUNT(*) as occurrences
FROM
`log` l
INNER JOIN
(SELECT id, personnumber FROM `log` ll WHERE ll.sectorid = 5) as ll ON l.personnumber = ll.personnumber
WHERE
l.personnumber IS NOT NULL
AND l.id > ll.id
GROUP BY
personnumber
HAVING COUNT(*) > 1
ORDER BY
occurrences DESC,
l.personnumber
输出:
+--------------+-------------+
| personnumber | occurrences |
+--------------+-------------+
| 66 | 2 |
+--------------+-------------+
1 row in set (0.01 sec)