按最近日期订购日期-SQL 选择单个 ID
Posted
技术标签:
【中文标题】按最近日期订购日期-SQL 选择单个 ID【英文标题】:Selecting a single ID by the most recent date Order Date -SQL 【发布时间】:2016-03-27 19:19:56 【问题描述】:我有一张像这样的表
Indvdl_Store_ID Indvdl_ID Order_ID Order_Date
101 123 A000 12/24/2011
101 241 B002 01/01/2013
101 201 Y180 01/01/2016
由于我们有与 3 个不同 Indvdl_ID 关联的相同 Indvdl_Store_ID,我想根据订单日期选择/保留该 Indvdl_StoreID 的最新个人 ID,但仍保留与 Indvdl_Store_ID 关联的所有订单。所以我希望我的最终结果看起来像这样
Indvdl_Store_ID Indvdl_ID Order_ID Order_Date
101 201 A000 12/24/2011
101 201 B002 01/01/2013
101 201 Y180 01/01/2016
我尝试使用 row_number 进行重复数据删除,然后将最终结果加入到 Indvdl_store_ID 上的表中,但我似乎仍然无法获得正确的结果。如有任何帮助或建议,我将不胜感激。
提前致谢!
【问题讨论】:
【参考方案1】:Oracle 设置:
CREATE TABLE table_name (Indvdl_Store_ID, Indvdl_ID, Order_ID, Order_Date ) AS
SELECT 101, 123, 'A000', DATE '2011-12-24' FROM DUAL UNION ALL
SELECT 101, 241, 'B002', DATE '2013-01-01' FROM DUAL UNION ALL
SELECT 101, 201, 'Y180', DATE '2016-01-01' FROM DUAL;
查询:
SELECT Indvdl_Store_ID,
MAX( Indvdl_ID ) KEEP ( DENSE_RANK LAST ORDER BY ORDER_DATE )
OVER ( PARTITION BY INDVDL_STORE_ID )
AS Indvdl_ID,
Order_ID,
Order_Date
FROM table_name;
输出:
INDVDL_STORE_ID INDVDL_ID ORDER_ID ORDER_DATE
--------------- ---------- -------- -------------------
101 201 A000 2011-12-24 00:00:00
101 201 Y180 2016-01-01 00:00:00
101 201 B002 2013-01-01 00:00:00
【讨论】:
【参考方案2】:可以使用内部连接和分组方式
select b.Order_Date, max(a.Indvdl_Store_ID), max( a.Indvdl_ID), b.Order_ID
from my_table as b
inner join my_table as a on a.Indvdl_ID = b.Indvdl_ID
group by b.Order_Date
【讨论】:
以上是关于按最近日期订购日期-SQL 选择单个 ID的主要内容,如果未能解决你的问题,请参考以下文章
如何编辑我的 postgreSQL 查询以按日期选择几列的最新行