1

commonprofit という名前のテーブルを次に示します。

name    date    turnover
1   2011/12 42359
1   2010/12 32863
1   2009/12 24293
1   2008/12 16436
1   2007/12 15442
2   2011/12 91634
2   2010/12 58410
2   2009/12 50668
2   2008/12 54297
3   2009/12 12352
3   2008/12 12352
3   2007/12 14226


select  name,max(date)  as date, turnover  from commonprofit  group  by name
union 
select  name,min(date) as date,turnover  from commonprofit    group  by name;

結果は

name|date|turnover
00001|2007/12|15442
00001|2011/12|42359
00002|2008/12|54297
00002|2011/12|91634
00003|2007/12|14226
00003|2009/12|12352

結果が次のようにならない理由:

name|date|turnover
00001|2011/12|42359
00002|2011/12|91634
00003|2009/12|12352
00001|2007/12|15442
00002|2008/12|54297
00003|2007/12|14226

シーケンスが sqlite クエリで必要なものではない理由を知りたいですか?

4

2 に答える 2

0

その理由はUNION、サブクエリで重複しているレコードを削除するためです。重複を見つけやすくするために、SQLite は結果を並べ替えます。

この手順を回避するには、UNION ALL代わりに を使用しUNIONます。(これは、nameが 1 つしかない場合date、 が 2 回表示されることを意味します。)

于 2012-11-11T10:27:57.697 に答える
0

特定の順序が必要な場合は、order by節を指定する必要があります。例えば、

select o, name, date, turnover from
(
  select  'x' as o, name, max(date) as date, turnover from commonprofit group  by name
  union 
  select  'n' as o, name, min(date) as date, turnover from commonprofit group  by name
)
order by o desc, name;

x|1|2011/12|42359
x|2|2011/12|91634
x|3|2009/12|12352
n|1|2007/12|15442
n|2|2008/12|54297
n|3|2007/12|14226
于 2012-11-11T04:43:51.197 に答える