androidsqlite中的复杂SQL查询
我有一个表androidsqlite中的复杂SQL查询,android,sql,sqlite,Android,Sql,Sqlite,我有一个表orders,由3列组成: order\u id int主键 客户id整数 order\u日期整数 关于数据: order_id | cust_id | order_date 1 | 10 | 1325376000 2 | 10 | 1325548800 3 | 10 | 1325894400 4 | 11 | 1325462400 5
orders
,由3列组成:
order\u id int主键
客户id整数
order\u日期整数
order_id | cust_id | order_date
1 | 10 | 1325376000
2 | 10 | 1325548800
3 | 10 | 1325894400
4 | 11 | 1325462400
5 | 11 | 1325721600
6 | 12 | 1325721600
7 | 12 | 1326326400
我正在尝试编写一个查询,以提供一个游标,其中包含给定客户的最新订单,然后我可以将该游标传递到SimpleCursorAdapter
并绑定到列表视图
,以便用户看到以下内容:
- 10 1325894400(格式为人类可读日期)
- 111325721600
- 12 1326326400
ArrayList
并使用ArrayAdapter
我会的,但我想先使用这个选项。谢谢
编辑:为here和SQLFiddle之间的差异道歉,大脑运行在两个不同的线程上。小提琴是“正确”的数据集
第二次编辑:添加了新的褶皱(忽略上面的表格,)。为自由格式文本添加字段,然后运行查询将返回GROUP BY中的第一条记录,以及max_日期字段。我需要提取包含日期等于max_date的整个记录。添加WHERE子句将中断查询。想法?试试这个
select
order_number
, cust_number
, order_date
from orders o1
where order_number =
(
select order_number
from orders o2
where o2.cust_number = o1.cust_number
and order_date =
(
select max(order_date)
from orders o3
where o3.cust_number = o2.cust_number
)
)
这将为您获得正确的记录,并且您可以在主查询中按照自己的喜好格式化日期
注意:我的答案与您的显示略有不同,因为这里的示例和小提琴不同。用小提琴
create table orders (order_number integer primary key,
cust_number integer not null,
order_date integer not null);
insert into orders values (1001,10,1005),
(1,10,1325376000),
(2,10,1325548800),
(3,11,1325894400),
(4,11,1325462400),
(5,11,1325721600),
(6,12,1325721600),
(7,12,1326326400),
(8,12,1326326460);
您在链接上输入的值与您在此处发布的值不同,但您正在查找:
select o1.cust_number, max(o1.order_date)
from orders o1
group by o1.cust_number
order by o1.cust_number ASC
这将为每个客户提供最新的订单。如果您只需要每个客户的最新记录,我认为这将起作用:
SELECT order_number, cust_number, max(order_date) as max_date FROM orders GROUP BY cust_number
很容易忘记诸如max()、min()之类的SQL函数,或者忘记必须将GROUP BY与它们配对的事实。哇,很高兴听你这么说!:-)