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与它们配对的事实。哇,很高兴听你这么说!:-)