![](/img/trans.png)
[英]How can I select distinct rows with max values on another column in Access 2016
[英]How can I select rows with MAX(Column) when another column has distinct values in oracle?
我有四个这样的列。
Material Description Quantity Date
a 133 200 26-09-2016 12:33
a 133 400 27-09-2016 10:33
我需要在Max(Date)时从该材料中获取数量;
我尝试了这个,但如果数量不同,则显示两行。
Select material , description , quantity , max(date)
FROM materials
group by material, description , quantity
在WHERE
子句中使用该条件
Select material , description , quantity
FROM materials
WHERE "Date" = (select max("Date") from materials)
使用RANK()
分析函数 :
SELECT *
FROM (
SELECT materials,
description,
quantity,
date,
RANK() OVER ( PARTITION BY materials ORDER BY date DESC ) AS rnk
FROM materials
)
WHERE rnk = 1;
如果存在具有相同materials
和最大date
值的行,则会获得多行 - 如果您只需要一行,则使用ROW_NUMBER()
而不是RANK()
。
你可以像这样使用row_number()(我想添加材料b,如果你需要找到组“a”和“b”中所有材料的数量):
WITH a(Material, Description , Quantity , sDate) AS
(SELECT 'b', 133, 1200 , to_date('26-09-2016 12:33','dd-mm-yyyy hh24:mi') FROM dual UNION ALL
SELECT 'b', 133, 2200 , to_date('29-09-2016 12:33','dd-mm-yyyy hh24:mi') FROM dual UNION ALL
SELECT 'a', 133, 200 , to_date('26-09-2016 12:33','dd-mm-yyyy hh24:mi') FROM dual UNION ALL
SELECT 'a', 133, 400 , to_date('27-09-2016 10:33','dd-mm-yyyy hh24:mi') FROM dual )
SELECT *
FROM (SELECT a.*,
row_number() over(partition BY material order by sdate DESC) rn
FROM a)
WHERE rn = 1
MATERIAL DESCRIPTION QUANTITY SDATE RN
-------- ----------- ---------- --------- ----------
a 133 400 27-SEP-16 1
b 133 2200 29-SEP-16 1
SELECT *
FROM (
SELECT materials,
description,
quantity,
date,
RANK() OVER ( PARTITION BY materials ORDER BY date DESC ) AS rnk
FROM materials
)
WHERE rnk = 1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.