繁体   English   中英

在多列上使用 DISTINCT 的 SQL SELECT

[英]SQL SELECT with DISTINCT on multiple columns

在 SQL 中,也可以使用 DISTINCT 子句添加多个字段。 DISTINCT 将消除所有选定字段都相同的行。

SQL 代码:

SELECT agent_code, ord_amount, cust_code, ord_num
FROM orders 
WHERE agent_code='A002';

ORD_NUM ORD_AMOUNT ADVANCE_AMOUNT ORD_DATE CUST_CODE AGENT_CODE


200114       3500           2000 15-AUG-08 C00002          A008
200122       2500            400 16-SEP-08 C00003          A004
200118        500            100 20-JUL-08 C00023          A006
200119       4000            700 16-SEP-08 C00007          A010
200121       1500            600 23-SEP-08 C00008          A004
200130       2500            400 30-JUL-08 C00025          A011
200134       4200           1800 25-SEP-08 C00004          A005
200108       4000            600 15-FEB-08 C00008          A004
200103       1500            700 15-MAY-08 C00021          A005
200105       2500            500 18-JUL-08 C00025          A011
200109       3500            800 30-JUL-08 C00011          A010
200101       3000           1000 15-JUL-08 C00001          A008
200111       1000            300 10-JUL-08 C00020          A008
200104       1500            500 13-MAR-08 C00006          A004
200106       2500            700 20-APR-08 C00005          A002
200125       2000            600 10-OCT-08 C00018          A005
200117        800            200 20-OCT-08 C00014          A001
200123        500            100 16-SEP-08 C00022          A002
200120        500            100 20-JUL-08 C00009          A002
200116        500            100 13-JUL-08 C00010          A009
200124        500            100 20-JUN-08 C00017          A007
200126        500            100 24-JUN-08 C00022          A002
200129       2500            500 20-JUL-08 C00024          A006
200127       2500            400 20-JUL-08 C00015          A003
200128       3500           1500 20-JUL-08 C00009          A002
200135       2000            800 16-SEP-08 C00007          A010
200131        900            150 26-AUG-08 C00012          A012
200133       1200            400 29-JUN-08 C00009          A002
200100       1000            600 08-JAN-08 C00015          A003
200110       3000            500 15-APR-08 C00019          A010
200107       4500            900 30-AUG-08 C00007          A010
200112       2000            400 30-MAY-08 C00016          A007
200113       4000            600 10-JUN-08 C00022          A002
200102       2000            300 25-MAY-08 C00012          A012

输出:

AGENT_CODE ORD_AMOUNT CUST_CODE     ORD_NUM
---------- ---------- ---------- ----------
A002             2500 C00005         200106
A002              500 C00022         200123
A002              500 C00009         200120
A002              500 C00022         200126
A002             3500 C00009         200128
A002             1200 C00009         200133
A002             4000 C00022         200113

想要优化我的查询

您似乎希望保留最早出现的每个不同名称。 一种选择使用子查询:

SELECT ID, Name, Date
FROM yourTable t1
WHERE Date = (SELECT MIN(Date) FROM yourTable t2 WHERE t2.Name = t1.Name)

请注意,如果两条具有最短日期的记录并列,则此解决方案将返回每个名称组的多个记录。 但样本数据似乎并不暗示会发生这种情况。

这是你想要的吗?

select min(id),name, min(date) from table_1  group by name

看起来您正在寻找每个名称的最早日期。 这个查询将实现这一点。 它将按名称对其进行分组并给出该名称的最短日期。

SELECT Name,MIN(Date) FROM table_1 GROUP BY Name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM