簡體   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