我真的可以使用SQL的一些帮助
我有一个表,每天为每个用户添加一行
UID DATE ATTRIBUTE
123 2017-01-01 Awesome
123 2017-01-02 Awesome
123 2017-01-03 Awesome
123 2017-01-04 Not Awesome
123 2017-01-05 Awesome
123 2017-01-06 Awesome
123 2017-01-07 Awesome
166 2017-01-01 Kinda Awesome
166 2017-01-02 Awesome
166 2017-01-03 Awesome
166 2017-01-04 Really Awesome
166 2017-01-05 Awesome
166 2017-01-06 Awesome
166 2017-01-07 Awesome
我想编写一个SQL查询,它允许我识别属性为任何用户更改的日期,用户的上一个属性以及用户的新属性。
我真的不知道从哪里开始。
答案 0 :(得分:0)
您可以使用窗口函数lag
来检查当前行值是否与最后一行函数匹配:
select *
from (
select t.*,
case
when attribute <> lag(attribute, 1, attribute) over (
partition by uid_ order by date_
)
then 1
else 0
end as flag
from your_table t
) t
where flag = 1;
请尽量不要使用UID,DATE等保留关键字作为标识符(我已在解决方案中为它们添加了下划线_
)。
答案 1 :(得分:0)
select
*
from
(
select
u.uid,
u.attribute,
u.date,
lag(u.attribute)
over (partition by u.uid order by u.date) as prev_attribute,
lag(u.date)
over (partition by u.uid order by u.date) as prev_date
from users u
) t
where t.attribute <> t.prev_attribute