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这很有帮助