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. (这意味着如果 aname只有一个date,它将出现两次。)

于 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 回答