查询序列结果为sqlite

时间:2012-11-11 00:42:17

标签: sqlite

这是名为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查询中序列不是我想要的原因吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

原因是UNION删除了子查询中重复的记录。 为了更容易找到重复项,SQLite对结果进行排序。

要避免此步骤,请使用UNION ALL代替UNION。 (这意味着,如果name只有一个date,则会出现两次。)