[英]SQL select one row from max(date)
我一直在尝试获取一些具体信息,但无法获取。
SELECT
idStyle,
idStyleDtl,
costPrice,
MAX(createDt) created,
idCustomer
FROM INVOICE_DTL
GROUP BY
idStyle, idStyleDtl,costPrice, idCustomer
ORDER BY
idStyle, idCustomer
这是我的查询
这就是结果。 我所期望的虽然突出显示的部分将被合并并仅显示一条带有created:2017-02-01 12:38:31.597
和costPrice:11.50
(因为它与MAX(createDt)
在同一行),因为它们具有相同的idStyle
, idStyleDtl
和idCustomer
。 我以为可能是MAX(costPrice)
,但它只是返回了更高的costPrice
而不是与MAX(createDt)
在同一行中的MAX(createDt)
。
当有相同的idStyle
, idStyleDtl
和idCustomer
时,我想获得一整行具有MAX(createDt)
结果。
即使是小的建议也将不胜感激。 谢谢!
您可以尝试将ROW_NUMBER
与窗口函数配合使用,以在子查询中按idStyle
, idStyleDtl
, idCustomer
列创建行号, idStyle
createDt
DESC进行排序。
然后获得rn = 1
数据,这意味着最大日期。
SELECT * FROM (
SELECT
idStyle,
idStyleDtl,
costPrice,
createDt,
idCustomer,
ROW_NUMBER() OVER(PARTITION BY idStyle, idStyleDtl, idCustomer ORDER BY createDt DESC) rn
FROM INVOICE_DTL
) t1
where rn = 1
ORDER BY
idStyle, idCustomer
通常,最有效的方法是相关子查询:
select i.*
from invoice_dtl i
where i.created_dt = (select max(i2.created_dt)
from invoice_dtl i2
where i2.idCustomer = i.idCustomer and
i2.idStyle = i.idStyle and
i2.idStyleDtl = i.idStyleDtl
)
order by i.idStyle, i.idCustomer;
特别是,这可以利用(idCustomer, idStyle, idStyleDtl, created_dt)
上的索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.