我的问题如下:
ID Value Date
---------------------------------
ID1 1 2014.03.03
ID2 1 2014.03.04
ID1 2 2014.03.04
ID3 1 2014.03.04
ID2 1 2014.03.05
ID2 1 2014.03.05
ID1 2 2014.03.05
ID1 2 2014.03.05
ID1 2 2014.03.05
ID1 1 2014.03.05
ID1 3 2014.03.05
我想要以下输出:
ID Value Date
---------------------------------
ID1 1 2014.03.03
ID1 2 2014.03.04
ID3 1 2014.03.04
ID2 1 2014.03.05
ID1 1 2014.03.05
ID1 3 2014.03.05
因此,如果ID1的值为1,我只想获得一次(日期并不重要,它可能是最新的或最旧的)。但是如果值改变(甚至是更早的值),我想将它写入输出。 我怎样才能做到这一点?
答案 0 :(得分:2)
您没有说明您的DBMS,因此这是ANSI SQL。
这样的事情可能会:
select id, value, date
from (
select id, value, date,
lag(value) over (order by id, date) as prev_value
from the_table
) t
where value <> prev_value
order by id, value;
它选择列value
中的值(btw:列的可怕名称)与上一行中该列的值不同的所有行。
答案 1 :(得分:-1)
尝试使用DISTINCT。
Select distinct ID, Value, Date From YOUR_TABLE
因此,对于元组,如果所有3列的数据都具有相同的值,则它将仅显示一个数据实例。但是,如果其中一列有不同的数据,它会认为它与之前的不同,并在输出中加密。