我的查询应该为所有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')
答案 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