从联接或组中查找第一行

Twi*_*tar 2 sqlite join group-by return

我有一个订单表,存储订单元包括他们的日期,样本数据如下

date      |order-id
2010-12-16|106
2010-12-18|112
2009-03-05|115
2009-03-05|122
Run Code Online (Sandbox Code Playgroud)

现在我需要创建一个文件夹,该文件夹对同月的所有订单进行分组,然后选择月份中的第一个订单作为展示,但它总是在下面的查询中选择最后一行

SELECT orders.id, order.date from orders
GROUP BY strftime('%Y-%m', orders.date)
Run Code Online (Sandbox Code Playgroud)

它返回每个月的最后一行

2010-12-18|112
2009-03-05|122
Run Code Online (Sandbox Code Playgroud)

所以我想要它回来

2010-12-16|106   
2009-03-05|115
Run Code Online (Sandbox Code Playgroud)

(106:本月早些时候)
(115:与另一个相同的日期,但如果我对该月进行排序订单查询,这将匹配第一个)

我尝试了JOIN查询,如果我在同一天没有多个订单,它可以工作,但在2009-03的情况下,它仍然返回最后一行,而不是第一行......

SELECT o.id, o.date
FROM orders o
JOIN 
   (SELECT MIN(date) as first_date FROM orders 
    GROUP BY strftime('%Y-%m', orders.date)
   ) as sorted_orders
ON o.creation_date=sorted_order.first_date
GROUP BY strftime('%Y-%m', orders.date)
Run Code Online (Sandbox Code Playgroud)

还有什么我可以尝试的吗?

CL.*_*CL. 7

您的第二个查询不起作用,因为您实际上没有从sorted_orders子查询中选择任何列.

无论如何,如果您有SQLite 3.7.11或更高版本,GROUP BY查询中的记录将保证来自与该组MINMAX该组匹配的组中的记录:

SELECT id, MIN(date)
FROM orders
GROUP BY strftime('%Y-%m', date)
Run Code Online (Sandbox Code Playgroud)

  • @dominikkv [3.7.11发布日志](http://www.sqlite.org/releaselog/3_7_11.html) (2认同)