MySQL - 按外键表获取不同的主Col表行顺序

时间:2014-07-24 22:10:51

标签: mysql sql tsql

标题可能令人困惑,这是我的架构

enter image description here

这是我的查询结果

enter image description here

我如何删除重复项,只是突出显示值,我正在尝试按消息时间排序

此致

2 个答案:

答案 0 :(得分:1)

SQL-Server中的一种方法是使用类似ROW_NUMBER的排名函数:

WITH CTE AS
(
    SELECT c.ContactID, c.Name, m.Text, m.Messagetime,
           RN = ROW_NUMBER() OVER (PARTITION BY c.ContactID
                                   ORDER BY m.MessageTime DESC)
    FROM dbo.Contacts c
    INNER JOIN Messages m ON c.ContactID = m.ContactID
)
SELECT ContadctId, Name, Text, Messagetime
FROM CTE
WHERE RN = 1

答案 1 :(得分:1)

以下语法适用于SQL Server和MySQL:

SELECT c.ContactID, c.Name, m.Text, m.Messagetime
FROM Contacts c INNER JOIN
     Messages m
     ON c.ContactID = m.ContactID
WHERE NOT EXISTS (select 1
                  from messages m2
                  where m2.ContactId = m.ContactId and
                        m2.MessageTime > m.MessageTime
                 )
ORDER BY m.MessageTime desc;

请注意,如果您有最近的消息时间重复,则会返回所有消息。