我已经阅读了几个关于计算连续行的类似问题,但没有一个给我一个明确的答案.我希望有人可以帮我解决一下我的问题.我有下表作为例子.
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)
该表用于确定哪些患者在某些日期进行了医学检查.PatientID和日期列非常明显.最后一列,TookTest是二进制指示符列,其中1表示患者参加测试,否则为0.PatientID和日期在创建此表时进行排序.我想计算连续至少3次接受检查的患者人数.在我们的示例中,PatientID 1和3进行了3次或更多次测试.所以答案是2.有人能告诉我如何在MySQL中编写查询吗?感谢您的帮助!
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
这是你的计算..唯一的事情是它看起来有点奇怪,因为计数从0而不是1开始,所以如果它连续3次计数将是2.这就是你要求的.....请参阅小提琴如果你有问题http://sqlfiddle.com/#!2/22ba28/12
| 归档时间: | 
 | 
| 查看次数: | 2449 次 | 
| 最近记录: |