2014-10-31 2 views
0

У меня есть база данных sqlite с именем heroes, где я пытаюсь найти вторую старую дату для каждого человека, который использовал эту услугу. Для того, чтобы найти самую старую дату, я просто использовал: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» таблицы temp, чтобы получить требуемое значение. –

+0

не обязательно самый чистый способ, но я только что создал новую базу данных из исходного csv, удалил строки min и снова выполнил мой первый запрос. – Nolan

+0

дубликат [Получите вторую последнюю дату на один идентификатор, а не последнюю версию) (http: /stackoverflow.com/questions/26662167/get-back-the-second-latest-date-per-id-instead-of-the-latest) –

ответ

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

Смежные вопросы