1

我有一个 table orders,由 3 列组成:

  • order_id int primary key,
  • cust_id integer,
  • order_date integer

有数据:

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

我正在尝试编写一个查询来提供一个包含给定客户的最新订单的 Cursor,然后我可以将其传递给 aSimpleCursorAdapter并绑定到 a ListView,以便用户看到以下内容:

  • 10 1325894400(格式化为人类可读日期)
  • 11 1325721600
  • 12 1326326400

我尝试以各种方式将表格加入到自身中,但没有任何运气:

http://sqlfiddle.com/#!2/77b22d/1/0

如果我必须填充ArrayList并使用ArrayAdapter我会的,但我想先用尽这个选项。谢谢!

编辑:为这里和 SQLFiddle 之间的差异道歉,大脑在两个单独的线程上运行。Fiddle 是“正确”的数据集。

第二次编辑:添加了一个新的皱纹(忽略上面的表格,请参阅 SQL fiddle)。为自由格式文本添加一个字段,然后运行查询会返回 GROUP BY 中的第一条记录,以及 max_date 的字段。我需要提取包含等于 max_date 的日期的整个记录​​。添加 WHERE 子句会中断查询。想法?

4

3 回答 3

1

尝试这个

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
         )
) 

这将为您提供正确的记录,并且您可以在主查询中随意格式化日期。

注意:我的回答与您的显示有点不同,因为这里的示例和 Fiddle 不同。用了小提琴

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);
于 2013-10-14T17:20:30.303 回答
1

如果您只想要每个客户的最新记录,我认为这将起作用:

SELECT order_number, cust_number, max(order_date) as max_date FROM orders GROUP BY cust_number
于 2013-10-14T17:24:44.693 回答
0

您在链接上输入的值与您在此处发布的值不同,但您正在寻找:

select o1.cust_number, max(o1.order_date)
from orders o1
group by o1.cust_number
order by o1.cust_number ASC

这将为您提供每位客户的最新订单。

于 2013-10-14T17:23:01.910 回答