输入“重置”记录后的MySQL PHP计数方式

问题描述 投票:0回答:1

我在尝试构造查询结构以允许我进行“重置”并仅在重置后才对记录进行计数方面遇到了麻烦。

基本结构

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

我希望这足以说明我的问题。任何帮助将非常感激。谢谢乔恩

php mysql select
1个回答
0
投票

您可以使用sectorIdpersonnumeber联接同一张表,以便计算此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)
© www.soinside.com 2019 - 2024. All rights reserved.