mysql – 如何使用SQL中上一行的值
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 如何使用SQL中上一行的值,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2174字,纯文字阅读大概需要4分钟。
内容图文
以下SQL Query给出了如下所述的输出:
SELECT claim_id,person_id,service_date,readmission_in_60_days
FROM xyz WHERE person_id IN("00026cb6","021fb6bd") GROUP BY person_id,service_date
ORDER BY service_date ASC
claim_id person_id service_date readmission_in_60_days
8 021fb6bd 2015-01-01 NULL
304 021fb6bd 2015-01-05 NULL
296 021fb6bd 2015-01-06 NULL
11888 021fb6bd 2015-01-07 NULL
23928 021fb6bd 2015-01-08 NULL
265442 00026cb6 2016-07-20 NULL
518062 00026cb6 2016-09-28 NULL
579739 00026cb6 2016-10-02 NULL
这里我想检查特定person_id的n和n-1行service_date.如果n和n-1 service_date之间的差异小于60天,则n row列readmission_in_60_days =“TRUE”否则为“FALSE”.
因此,SQL查询所需的输出应为:
claim_id person_id service_date readmission_in_60_days
8 021fb6bd 2015-01-01 FALSE
304 021fb6bd 2015-01-05 TRUE
296 021fb6bd 2015-01-06 TRUE
11888 021fb6bd 2015-01-07 TRUE
23928 021fb6bd 2015-01-08 TRUE
265442 00026cb6 2016-07-20 FALSE
518062 00026cb6 2016-09-28 FALSE
579739 00026cb6 2016-10-02 TRUE
解决方法:
另一种方法是通过变量模拟MySQL中的LAG函数.像这样的东西:
SET @prevdate = '1900-01-01';
SET @prevperson = "";
SELECT id, personid, servicedate,
CASE WHEN prevperson = personid THEN
CASE WHEN datediff(servicedate,prevdate) > 60 THEN FALSE
ELSE TRUE END
ELSE FALSE END AS readmission_within_60_days
FROM
(SELECT id, personid, servicedate,
@prevdate prevdate,
@prevperson prevperson,
@prevdate := servicedate as thisdate,
@prevperson := personid as thisperson FROM xyz
ORDER BY id, personid) t order by id, personid;
编辑
如果你不能使用变量,你可以得到你想要的:
SELECT z.id,
z.personid,
z.servicedate,
CASE WHEN z.MaxPrevDate IS NULL
THEN FALSE
ELSE
CASE WHEN datediff(z.servicedate,z.maxprevdate) > 60
THEN FALSE
ELSE
TRUE
END
END as readmission_within_60_days
FROM
(SELECT x.id, x.personid, x.servicedate,
(SELECT Max(servicedate) FROM xyz y
WHERE y.personid = x.personid AND y.id < x.id) AS maxPrevDate
FROM xyz x) z
内容总结
以上是互联网集市为您收集整理的mysql – 如何使用SQL中上一行的值全部内容,希望文章能够帮你解决mysql – 如何使用SQL中上一行的值所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。