[英]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.