【问题标题】:sqlite, order by date/integer in joined tablesqlite,在连接表中按日期/整数排序
【发布时间】:2016-01-08 23:16:45
【问题描述】:

我有两张桌子

名字

id | name
---------
5  | bill
15 | bob
10 | nancy

参赛作品

id | name_id | added    | description
----------------------------------
2  | 5       | 20140908 | i added this
4  | 5       | 20140910 | added later on
9  | 10      | 20140908 | i also added this
1  | 15      | 20140805 | added early on
6  | 5       | 20141015 | late to the party

我想按Entries 表中数字最低的added 值中的第一个排序Names,并显示两个表中按added 列整体排序的行,因此结果会是这样的:

names.id | names.name | entries.added | entries.description
-----------------------------------------------------------
15       | bob        | 20140805      | added early on
5        | bill       | 20140908      | i added this
10       | nancy      | 20140908      | i also added this

我查看了第一项的联接(例如 SQL Server: How to Join to first row),但无法使其正常工作。

有什么建议吗?

【问题讨论】:

    标签: sqlite join inner-join


    【解决方案1】:

    试试这个查询:

    SELECT Names.id, Names.name, Entries.added, Entries.description 
    FROM Names 
    INNER JOIN Entries 
    ON Names.id = Entries.name_id 
    ORDER BY Entries.added
    

    如果你想以相反的顺序添加DESC,即:ORDER BY Entries.added DESC

    【讨论】:

    • 否,因为如果有多个条目,这会多次列出名称。
    • SELECT DISTINCT 会有所帮助... ;)
    【解决方案2】:

    应该这样做:

    SELECT n.id, n.name, e.added, e.description 
    FROM Names n INNER JOIN
         (SELECT name_id, description, Min(added) FROM Entries GROUP BY name_id, description) e
         ON n.id = e.name_id 
    ORDER BY e.added
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多