如何在 DB2 中查询不同的列值,而不是不同的行?

How to query in DB2 for distinct column value, rather than a distinct row?

我正在尝试构建一个 returns 不同行的 DB2 查询,但要仅基于一列的值进行区分。

如果 itemColor 不同,下面的查询将允许具有相同订单号的多行。

select distinct
    orderNumber,
    itemColor,
    orderDate
from ORDER_TABLE

returns...

order_number      item_color      order_date
    0001      |      red      |   2018-06-19
    0001      |     green     |   2018-06-19 // DUPLICATE ORDER_NUMBER
    0002      |      red      |   2018-06-19
    0003      |      red      |   2018-06-19
    0004      |      red      |   2018-06-19

我希望我的查询执行如下操作:

select
    orderNumber,
    itemColor,
    orderDate
from ORDER_TABLE
where orderNumber is distinct

这样我就可以放心,每个订单号只会返回一条记录。似乎 DB2 不允许不同的列值,但只允许不同的完整行。

我看到的一个建议是做一个子查询,像这样:

select
    orderNumber,
    itemColor,
    orderDate
from ORDER_TABLE
where orderNumber in (select distinct(orderNumber) from ORDER_TABLE)

...但遗憾的是这没有用,我仍然在结果集中看到具有相同 orderNumber 的记录。

我看到官方文档说要使用 group by 运算符 - 但这似乎是为了聚合函数,我不想聚合任何记录!我只想要每个 orderNumber 一行。也许我误解了文档。

谢谢。

您可以使用 window 函数:

select orderNumber, itemColor, orderDate
from (select o.*, row_number() over (partition by orderNumber order by orderNumber) as seqnum
      from ORDER_TABLE
     ) o
where seqnum = 1;