【问题标题】:MySQL - Get Distinct Primary Col Table Row Order By Foreign Key TableMySQL - 通过外键表获取不同的主 Col 表行顺序
【发布时间】:2014-07-24 22:10:50
【问题描述】:

标题可能有点混乱,这是我的架构

这是我的查询结果

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

问候

【问题讨论】:

  • 重复的规则是什么?最近的胜利?
  • 这是 MS SQL_Server 吗?
  • 是的 @TimSchmelter 它的 sqlserver 但我最终不得不针对 mysql 运行它
  • @PM77-1 我必须根据最近收到的消息获取联系人姓名
  • distinct不是函数。它总是对选择列表的所有列进行操作。

标签: mysql sql tsql


【解决方案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;

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

【讨论】:

  • mysql 有Row_Number()?
  • @dakait 。 . .谢谢你。那应该已经被删除了。
  • 只有一件事,我怎样才能让它按 messagetime desc 排序?请参阅屏幕截图的突出显示部分.... P.S 一百万谢谢
【解决方案2】:

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

【讨论】:

  • CTE 类似于子查询,因此您可以使用一个。但是如果你问是因为你想在MySql中使用它,那是行不通的,因为MySql没有Row_Number函数。您需要使用Group By。但是我现在没有时间给你看一个例子。
  • tnx 非常想尝试一下
  • 我收到错误The multi-part identifier "c.contactid" could not be bound.
  • @TimSchmelter tnx 给你时间 :)
猜你喜欢
  • 1970-01-01
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
相关资源
最近更新 更多