2

次のような日付、サンプルデータを含む注文メタを格納する注文テーブルがあります

date      |order-id
2010-12-16|106
2010-12-18|112
2009-03-05|115
2009-03-05|122

今度は、同じ月のすべての注文をグループ化するフォルダーを作成し、その月の最初の注文をショーケースとして選択する必要がありますが、下のクエリの最後の行を常に選択することでグループ化されているように見えます

SELECT orders.id, order.date from orders
GROUP BY strftime('%Y-%m', orders.date)

毎月の最後の行を返します

2010-12-18|112
2009-03-05|122

だから帰って欲しい

2010-12-16|106   
2009-03-05|115

(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)

他に試すことができるものはありますか?

4

1 に答える 1

7

sorted_ordersサブクエリから実際に列を選択していないため、2番目のクエリは機能しません。

とにかく、SQLite 3.7.11以降を使用している場合、クエリ内のレコードは、またはそのグループGROUP BYに一致するグループ内のレコードから取得されることが保証されます。MINMAX

SELECT id, MIN(date)
FROM orders
GROUP BY strftime('%Y-%m', date)
于 2013-02-10T22:12:54.657 に答える