返回18个月内没有新记录的患者

时间:2016-03-22 15:15:31

标签: mysql

我的查询应该为所有18个月没有进入的患者寻找并提取数据。

oID   Date          Crea
1     2014-09-22    153
1     2012-10-15    365
2     2014-08-02    212
2     2015-02-18    245
3     2016-03-19    438

我提取oID 1的最新条目,因为它们自2014-09-22后没有条目 - 但我需要省略所有其他数据,即使oID 2在18个月之前有条目从那以后就有了。我怎么能做到这一点?

此外,我需要使用 no 条目返回任何患者:

oID   Date          Crea
1     2014-09-22    153
1     2012-10-15    365
2     2014-08-02    212
2     2015-02-18    245
3     2016-03-19    438
4                   514

这似乎不起作用:

select ifnull(date_column , 'No visit') 

2 个答案:

答案 0 :(得分:1)

使用TIMESTAMPDIFF()查找两个日期之间的差异。 请尝试以下查询

SELECT oID
FROM table_name
WHERE 18 < (SELECT TIMESTAMPDIFF(MONTH, date, date)
            FROM table_name a, table_name b
            WHERE a.oID = b.oID);

答案 1 :(得分:1)

您可以尝试双重反模式:

    SELECT e1.*                   /* Select entry.. */
      FROM entry e1

 LEFT JOIN entry e2            /* Find later entries for same oid */
        ON e2.oid  = e1.oid
       AND e2.date > e1.date

 LEFT JOIN entry e3            /* Find entries for same oid within 18 months */
        ON e3.oid = e1.oid
       AND e3.date > CURDATE() - INTERVAL 18 MONTH

     WHERE e2.oid IS NULL      /* e2 doesn't exist */
       AND e3.oid IS NULL      /* e3 doesn't exist */

请参阅SQL Fiddle