获取两个不同行之间具有最近日期的行ID

时间:2014-05-20 04:03:37

标签: sql sql-server tsql

SQL Masters ...我试图获取一个消息表,并在两行" tie"由于他们的"类型"。这是表格I' m中每种类型的最大值(必须进行比较):

id          type          typeId           createDate
234         S             344              4/5/2014
355         W             654              5/17/2014

问题出现在"类型" " S"和" W"彼此相关(id字段不在我的结果中,因为你可以在身份时按ID分组)。该表有MULTIPLE"类型"彼此相关的。例如," type" " W"与#34;类型"有很多关系。 " S" ...因此,在此表中," W"可能与" S"它可能没有 - 有第二个表格来建立这个链接(称之为" W"表格):

id          s_type_id
654         234

好的,所以这就是我要做的事情......我需要获得不同类型之间第一个表(消息)的最大值(消息表在上面简化为显示我已经能够获得类型" S"以及类型" W"的最大消息的最大消息,但似乎无法弄清楚如何获得S& W之间的最大值(应该是2014年5月17日的W值)并得到该消息的ID(应该是355)。这是我的预期结果(我将使用它)对消息表进行反向连接以获取该表中的其余信息) - 显然不是正确的查询:

SELECT
    id,
    MAX(createdDate)
FROM
    messages


id          createdDate
355         5/17/2014

后退加入不起作用,因为类型按类型分组(排除了ID - 我试图在你的帮助下获得)。提前谢谢!

1 个答案:

答案 0 :(得分:0)

SELECT m.id, m.type, m.typeId, m.createDate
FROM
(
SELECT m.id, m.type, m.typeId, m.createDate, 
ROW_NUMBER() OVER (
-- you can also keep one row per "group"
-- PARTITION BY m.type
ORDER BY m.createDate DESC
-- you can also specify a secondary ordering criteria
-- , m.type
) AS RowNum
FROM
messages m
) m
WHERE
m.RowNum = 1;