【发布时间】:2012-06-04 15:11:30
【问题描述】:
我在 Postgres 表中有一些数据,如下所示:
1 apple datetime1
2 orange datetime2
3 apple datetime3
4 orange datetime4
5 apple datetime5
6 orange datetime6
.
日期时间始终按升序排列,大多数情况下苹果行首先插入,橙色排在第二位,但我必须捕捉并消除一些例外情况。
我实际上需要的是一个仅将苹果和橙子配对的 Postgres 查询:
1 apple datetime1 2 orange datetime2
3 apple datetime3 4 orange datetime4
5 apple datetime5 6 orange datetime6
苹果不应该和其他苹果搭配,橙子也不应该和其他橙子搭配。
有几个条件:
1) 在新生成的行中,苹果应该始终排在第一位,橙色排在第二位。
2) 始终将 apple 和 orange 行与最接近的日期时间配对,并忽略其他行。
例如,如果我的原始数据如下所示:
1 apple datetime1
2 apple datetime2
3 orange datetime3
4 orange datetime4
对
2 apple datetime2 3 orange datetime3
并忽略行
1 apple datetime1
4 orange datetime4
任何想法如何在 Postgres 中执行此操作?
【问题讨论】:
-
正好两个 fuits -
apple/orange?没有其他也没有NULL? -
@Erwin Brandstetter 同一张桌子上还有一些其他水果,但对于本报告,我只需要找到苹果和橙子。
-
@ErwinBrandstetter 好的,这次你做 CTE,好吗?
-
@wildplasser:你明白了。 stackoverflow.com/a/10884184/939860
-
+1 顺便说一句,让自己非常清楚。
标签: sql postgresql