[英]Determine 'valid until' date in MySQL query
在此表中,我存储了某些spid的可更改值。 随着时间的流逝,这些值可以更改,并且spid可以获取新值。
现在,我想找出直到启用某个值为止。
这是单个spid的数据
uid spid propertyvalue creationdate
--------------------------------------------------
1 3 First name 2010-01-17 22:34:00
37 3 Second name 2010-01-18 01:07:24
38 3 Third name 2010-01-18 01:09:00
39 3 Fourth name 2010-01-18 01:18:16
40 3 Fifth name 2010-01-18 01:20:02
因此,第一个值从2010-01-18 01:07:24开始,并且有效期至2010-01-18 01:01:00 。
我已经尝试过此查询:
SELECT s1 . * ,
s2.creationdate AS datetwo
FROM salespointproperty s1
JOIN salespointproperty s2 ON s1.spid = s2.spid
AND s1.creationdate < s2.creationdate
这给了我很多双重记录(其中一些是错误的),并且总是遗漏了最后一个新名字(因为它后面没有新的创建日期)。
uid spid propertyvalue creationdate datetwo
--------------------------------------------------------------
1 3 First name 2010-01-17 22:34:00 2010-01-18 01:07:24 *
1 3 First name 2010-01-17 22:34:00 2010-01-18 01:09:00
37 3 Second name 2010-01-18 01:07:24 2010-01-18 01:09:00 *
1 3 First name 2010-01-17 22:34:00 2010-01-18 01:18:16
37 3 Second name 2010-01-18 01:07:24 2010-01-18 01:18:16
38 3 Third name 2010-01-18 01:09:00 2010-01-18 01:18:16 *
1 3 First name 2010-01-17 22:34:00 2010-01-18 01:20:02
37 3 Second name 2010-01-18 01:07:24 2010-01-18 01:20:02
38 3 Third name 2010-01-18 01:09:00 2010-01-18 01:20:02
39 3 Fourth name 2010-01-18 01:18:16 2010-01-18 01:20:02 *
仅带有星号的行是正确的。 缺少第五个名称。
假设在您的示例中,uid 37在uid 38之前一直有效,uid 38在uid 39之前一直有效,依此类推。
SELECT
s1.uid,
s1.spid,
s1.propertyvalue,
s1.creationdate,
MIN(s2.creationdate) AS datetwo
FROM salespointproperty s1
INNER JOIN salespointproperty s2
ON s1.spid = s2.spid
AND s1.creationdate < s2.creationdate
GROUP BY
s1.uid,
s1.spid,
s1.propertyvalue,
s1.creationdate;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.