2016-03-15 2 views
1

У меня есть две таблицы 'sites' и 'index_log'. Таблица «sites» - это информация о сайтах (userid, name, description ...). В таблице index_log указаны столбцы date, index_count и siteid. Поэтому я хочу, чтобы получить последнюю и предыдущую index_log строки для каждого сайта, где Идентификатор_пользователь = 10. Это мой вариант:Присоединиться к Max и pre-Max row

SELECT ff.id, 
     ff.siteurl, 
     ff.last_count, 
     ff.last_date, 
     il2.index_count as previous_count, 
     MAX(il2.date) as previous_date 
FROM (
    SELECT s.siteurl, 
      s.id, 
      il.index_count as last_count, 
      MAX(il.date) as last_date 
    FROM sites s 
    LEFT JOIN index_logs il ON il.siteid = s.id 
    WHERE s.userid = 10 
    GROUP BY s.id 
    ) as ff 
LEFT JOIN index_logs il2 ON il2.siteid = ff.id AND il2.date < ff.last_date 
GROUP BY ff.id 

Но в этой колонке варианта index_count (последний и предыдущий) не совпадает с максимальной датой строкой. Я надеюсь на вашу помощь.

+0

Это не действительный запрос SQL Server, выглядит как MySQL? – dnoeth

+0

Что заставляет вас говорить, что @dnoeth? – Squirrel

+0

'GROUP BY' не включает все эти неагрегированные столбцы в списке SELECT ... – dnoeth

ответ

0

это будет дает вам последние записи 2 журнала за sites.id

; with CTE as 
(
    SELECT s.siteurl, s.id, il.index_count, il.date, 
      RN = ROW_NUMBER() OVER (PARTITION BY s.id ORDER BY il.date DESC) 
    FROM sites s 
    JOIN index_logs il ON il.siteid = s.id 
    WHERE s.userid = 10 
) 
SELECT * 
FROM CTE 
WHERE RN <= 2 
+0

Извините, он не работает в mysql –

+0

Я понятия не имею, что вы используете MySQL – Squirrel

+0

Имеет ли MySQL аналогичную функцию, такую ​​как ROW_NUMBER()? – Squirrel

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