Sql 我在一个表中有一个列项目的多个数据,每个值只需要一个
我有一个表Sql 我在一个表中有一个列项目的多个数据,每个值只需要一个,sql,sql-server,Sql,Sql Server,我有一个表T\u HISTORY,它可以为一个item\u ID 我想为每个项目\u id SELECT * FROM T_HISTORY WHERE EVENT_CD = 'comment' 这将返回以下数据: HIST_ID item_id ITEM_TYPE EVENT_CD STATE USER_NM EVENT_DT 1953 115 SOURCE_ITEM_ID COMMENT AP Exce
T\u HISTORY
,它可以为一个item\u ID
我想为每个项目\u id
SELECT * FROM T_HISTORY WHERE EVENT_CD = 'comment'
这将返回以下数据:
HIST_ID item_id ITEM_TYPE EVENT_CD STATE USER_NM EVENT_DT
1953 115 SOURCE_ITEM_ID COMMENT AP Exception proc2 2016-04-20 11:24:56.207
5254 137 SOURCE_ITEM_ID COMMENT Final Approval bnunn 2016-05-05 14:52:50.800
7120 255 SOURCE_ITEM_ID COMMENT AP Exception bnunn 2016-05-18 11:15:47.657
17082 424 SOURCE_ITEM_ID COMMENT AP Exception admincor360 2016-12-08 01:56:30.670
17086 424 SOURCE_ITEM_ID COMMENT AP Exception admincor360 2016-12-08 02:14:01.743
Mihai在评论中提供了解决方案。这也可以在视图中使用
Mihai在评论中提供了解决方案。这也可以在视图中使用。您可以使用派生表对数据进行排序,然后仅选择所需的行:
with cte
as
(
select HIST_ID
,ITEM_ID
,ITEM_TYPE
,EVENT_CD
,STATE
,USER_NM
,EVENT_DT
,row_number() over (partition by ITEM_ID order by EVENT_DT desc) as rn
from T_HISTORY
where EVENT_CD = 'comment'
)
select *
from cte
where rn = 1
您可以使用派生表对数据进行排序,然后仅选择所需的行:
with cte
as
(
select HIST_ID
,ITEM_ID
,ITEM_TYPE
,EVENT_CD
,STATE
,USER_NM
,EVENT_DT
,row_number() over (partition by ITEM_ID order by EVENT_DT desc) as rn
from T_HISTORY
where EVENT_CD = 'comment'
)
select *
from cte
where rn = 1
如果您有多个具有相同ID的项目,应选择哪一个?它还提供了日期,我希望输入更晚的日期,如果可以在视图
ROW\u NUMBER()中完成此操作(按项目划分\u ID顺序按事件\u DT DESC)
更多提示以及如何在where条件下使用此行号?如果您有多个具有相同ID的项目,应选择哪一个?它还提供日期,我希望输入更晚的日期,如果可以在视图行号()中完成此操作(按项目ID划分,按事件描述排序),将更有帮助
更多提示以及在何处条件下如何使用此行号?为了安全起见,我会包括一份订单。为了安全起见,我会包括一份订单。谢谢@Jens这很有帮助谢谢@Jens这很有帮助