我有一个问题让我刮了一下头脑。
我有一张交易表。它包括类型,日期,时间,数量等。大约有30种类型。不幸的是,类型1和2 可能成对出现,日期,时间和数量让我知道它们是否确实是重复的同一事务。
我可以获取除日期,时间和数量匹配的类型1和2之外的所有类型的所有行吗?
示例输入:
Row | Type | Qty | Date | Time |
1 | 1 | 12 | 2015-01-06 00:00:00.000| 74501|
2 | 1 | 15 | 2015-02-06 00:00:00.000| 91023|
3 | 2 | 15 | 2015-02-06 00:00:00.000| 91023|
4 | 3 | 7 | 2015-03-10 00:00:00.000|151256|
问题是第2行和第2行。 3代表相同的交易。所以我的select语句需要返回第1,3,4(或1,2,4)行。
注意:类型2始终具有类型1,类型1不总是具有类型2.
请帮助我改善这句话!
答案 0 :(得分:1)
您可以在分区中的列表后面添加更多列...
WITH dups AS
(SELECT *, row_number() over
(PARTITION by Date, Time, Quantity ORDER BY type)
AS c1 FROM t2)
SELECT DISTINCT type, date, time, quantity
FROM dups
WHERE c1 > 1
AND type not in (1,2)