在此表中,我存储了某些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 之前有效。< / p>
我已经尝试过此查询:
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 *
只有带星号的行是正确的。缺少第五个名字。
答案 0 :(得分:1)
假设在你的例子中,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;