1

这应该很简单,但我无法弄清楚这一点。我需要获取一行数据,其中该行中的字段是该列的最大值,并且已在该行上设置了特定状态,该行已按值过滤。

这是表格的一个示例:

ID          Date Entered        Item       Status 
1           1/1/2012            Joe        Ready
2           1/2/2012            Joe        Ready
3           1/1/2012            Sam        Ready
4           1/2/2012            Sam        Not Ready
5           1/2/2012            Sam        Ready
6           1/1/2013            Jimmy      Not Ready

我想要返回的结果集是:

ID          Date Entered        Item       Status
2           1/2/2012            Joe        Ready
5           1/2/2012            Sam        Ready

这是我迄今为止的许多失败尝试之一:

Select id, max(Date_Entered), Item
from table1
where status = 'Ready'
Group by Item, id

这会返回太多带有重复项的项目

Select max(Date_Entered), RELEASE_GROUP_C
from table1
where status = 'Ready'
Group by item

这不会返回 ID。

4

3 回答 3

2

您可以为此使用该ROW_NUMBER()功能:

SELECT ID, [Date Entered], Item, Status
FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY Item ORDER BY [Date Entered] DESC)'RowRank'
      FROM Table1
      WHERE Status = 'Ready'
      )sub
WHERE RowRank = 1

演示:SQL 小提琴

该函数为节中定义的每个分组和基于节的顺序ROW_NUMBER()分配从 1 开始的每一行,在这种情况下,对于每个它将从 1 开始为最新/最新日期编号。PARTITION BYORDER BYItem

于 2013-07-22T19:40:22.027 回答
1

像这样?

SELECT ID, Date_Entered, Item, Status 
FROM t1 
WHERE 
Status = 'Ready'
AND 
t1.Date_Entered = (SELECT MAX(Date_Entered) FROM t1)
于 2013-07-22T19:37:58.567 回答
0
with CTE_TEMP as 
(
    select
        *,
        row_number() over (partition by Item order by Date desc, ID desc) as row_num
    from temp
    where Status = 'Ready'
)
select *
from CTE_TEMP
where row_num = 1

SQL 提琴示例

于 2013-07-22T19:45:27.987 回答