在此表中,我存储了某些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年1月18日01:07:24,有效期至2010年1月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;
关于mysql - 在MySQL查询中确定“有效至”日期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2083294/