如何忽略数据库查询中重复的顺序值
我有一个巨大的postgres数据库,需要经常查询。我正在查询的数据集有许多重复的顺序值。例如:如何忽略数据库查询中重复的顺序值
3,4,5,1,1,1,1,1,1,1 ... 1,1,1,1,1,8
如果一系列重复值只返回该序列的第一个和最后一个记录,是否有可能?例如:
If the data is:
3,4,5,1,1,1,1,1,1,1 ... 1,1,1,1,1,8
The query result should be:
3,4,5,1*,1**,8
* first occurrence of "1"
** last occurrence of "1"
编辑:
我选择由[值,created_at]的各行,通过created_at排序。
由于我需要在图表中显示此信息,因此获取第一个和最后一个出现位置非常重要,它们之间的值可以忽略。
您可以使用LAG和LEAD要做到这一点很容易:
with T(n,created_at,bef,aft) as (
select
n,
created_at,
lag(n,1) over (order by created_at),
lead(n,1) over (order by created_at)
from your_table
)
select
n,
created_at
from T
where bef is distinct from n
or aft is distinct from n;
如果created_at的值不是唯一的,你应该在区分列在ORDER BY列表中添加这样的滞后()和铅()表达式是确定性的。
您有两个太多的nots。 – 2012-02-29 02:40:37
Aargh。它应该是从不同,而不是不从。我在SQL Server上测试过它,它没有这个功能......我会修复它。 – 2012-02-29 02:41:23
这很好,谢谢! – marcosbeirigo 2012-02-29 17:29:07
序列是以行还是列的形式返回的? – ChristopheD 2012-02-28 23:21:49
是否有一个原因,只是得到不同的值不会工作? – 2012-02-28 23:22:17
@ChristopheD行,每一行由[值,created_at] – marcosbeirigo 2012-02-28 23:23:24