我的表格包含以下订单信息:
正如我们从该表中看到的,每个order_no都有几个重复。所以我想要的是每个order_no只保留一行(无论哪个)
有没有人知道如何做到这一点?(我尝试了不同的',但这些重复行的某些列是不同的,所以'不同'可以' t在这里工作)
答案 0 :(得分:0)
也许这样的事情?您可以使用PARTITION BY
和ORDER BY
子句来确定返回哪一行。航空代码:
SELECT t.*
FROM (
SELECT o.*
, ROW_NUMBER() OVER (PARTITION BY o.order_no ORDER BY o.sequence_no) rn
FROM ordertable o
) t
WHERE rn = 1
;
答案 1 :(得分:0)
我遇到了同样的问题,这个查询对我有用。
WITH summary
AS (SELECT g.*,
ROW_NUMBER ()
OVER (PARTITION BY g.param_text
ORDER BY g.gnl_param_id DESC)
AS rk
FROM gnl_param g)
SELECT s.gnl_param_id, s.param_text
FROM summary s
WHERE s.rk = 1
这里,param_text列应该是唯一的,但不知何故发生了重复的行。这就是我在这一栏中使用分区关键字的原因。
答案 2 :(得分:-1)
SELECT *
FROM
(
SELECT *
,ROW_NUMBER() OVER (PARTITION BY ORDER_NO ORDER BY ????) as RowNumber
FROM
Orders
) o
WHERE
o.RowNumber = 1
只需填写order by子句,即可选择您想成为第一行的记录。如果您不关心哪条记录的顺序,则将该行更改为
,ROW_NUMBER() OVER (PARTITION BY ORDER_NO ORDER BY Null) as RowNumber
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions137.htm
由于ORDER BY NULL,我假设投票结果为止?但Oracle接受它tsql(sql-server)没有。看到这个答案: