繁体   English   中英

当另一列在oracle中具有不同的值时,如何选择MAX(列)行?

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

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