2014-10-31 54 views
0

我有一个名为英雄的sqlite数据库,我试图找到使用该服务的每个人的第二最旧的日期。为了找到我只是用的最早日期:sqlite,在每个组中选择第二小

SELECT MIN(Date), Cust_Num FROM heroes GROUP BY Cust_Num; 

现在,我使用下面找到第二最早日期:

SELECT MAX(Date), Cust_Num FROM heroes WHERE Date IN (SELECT Date FROM heroes ORDER BY Date LIMIT 2) GROUP BY Cust_Num; 

然而,它只是给了我谁使用了9人第一天服务第二天有数据。有什么建议?

谢谢!

+0

我会按照我想要的方式创建一个临时表,并使用临时表的ROWID来获取所需的值。 – 2014-10-31 20:22:33

+0

不一定是最干净的方式,但我刚刚从原始csv创建了一个新的数据库,删除了最小行并再次运行我的第一个查询 – Nolan 2014-10-31 20:43:41

+0

重复[取回第二个最新日期而不是最新](http:/ /stackoverflow.com/questions/26662167/get-back-the-second-latest-date-per-id-instead-of-the-latest) – 2014-10-31 21:45:38

回答

0

如果您加入客户编号的子查询,您可以确定日期与适当的客户编号相匹配。随着你的第二次尝试,你没有那种确定性。

SELECT h.Cust_Num, MAX(d.Date) 
FROM 
    heroes h 
    JOIN (
     SELECT Cust_Num, Date 
     FROM heroes 
     ORDER BY Date 
     LIMIT 2 
    ) d 
    ON d.Cust_Num = h.Cust_Num 
GROUP BY h.Cust_Num 
ORDER BY h.Cust_Num; 
+0

它只从最早的可用日期中选择2个人。 – Nolan 2014-10-31 20:26:50

相关问题