MySQL:计算具有相同值的连续行

mid*_*uru 2 mysql

我已经阅读了几个关于计算连续行的类似问题,但没有一个给我一个明确的答案.我希望有人可以帮我解决一下我的问题.我有下表作为例子.

create table medical
 (PatientID int,
  Date Date,
  TookTest int
 );

insert into medical(PatientID, Date, TookTest)
values
(1, '2014-01-01', 1),
(1, '2014-01-05', 1),
(1, '2014-01-10', 1),
(2, '2014-01-01', 1),
(2, '2014-01-10', 0),
(2, '2014-01-20', 1),
(3, '2014-01-01', 1),
(3, '2014-01-07', 1),
(3, '2014-01-12', 1),
(3, '2014-01-21', 1),
(4, '2014-01-03', 1),
(4, '2014-01-05', 1),
(4, '2014-01-22', 0),
(4, '2014-01-27', 1)
Run Code Online (Sandbox Code Playgroud)

该表用于确定哪些患者在某些日期进行了医学检查.PatientID和日期列非常明显.最后一列,TookTest是二进制指示符列,其中1表示患者参加测试,否则为0.PatientID和日期在创建此表时进行排序.我想计算连续至少3次接受检查的患者人数.在我们的示例中,PatientID 1和3进行了3次或更多次测试.所以答案是2.有人能告诉我如何在MySQL中编写查询吗?感谢您的帮助!

Joh*_*ell 6

SELECT 
    m_id 
FROM(
    SELECT
        m.PatientID AS m_id,
        m.Date AS m_date,
        m.TookTest,
        IF(m.TookTest = 1 AND @b = m.PatientID, @a := @a +1, @a := 0) AS new_count,
        @b := m.PatientID
    FROM medical m
JOIN (
    SELECT 
        @a := 0, 
        @b := 0
    ) AS t
  ) AS TEMP
WHERE new_count >= 2
GROUP BY m_id
Run Code Online (Sandbox Code Playgroud)

这是你的计算..唯一的事情是它看起来有点奇怪,因为计数从0而不是1开始,所以如果它连续3次计数将是2.这就是你要求的.....请参阅小提琴如果你有问题http://sqlfiddle.com/#!2/22ba28/12