2014-11-21 3 views
3

Запрос ниже, кажется LIMIT всех результатов, когда он Оставшись JOINED, так что общее в подзапросе только 1. Как я могу сделать это LIMIT, так что я получаю 1:1 совпадение между projects строками и последней датой, хранящейся в projects_hours_archive, в которой хранятся записи projects.projected_hours, которые собираются на задании cron раз в неделю?предела а LEFT JOIN подзапроса 1 результат

projected_hours_archive имеет столбцы: id, project_id, hours и datetime.

SELECT 
    GROUP_CONCAT(projected_hours_last.date, '|', projected_hours_last.number) AS 'projected_last_info' 
FROM 
projects 


LEFT JOIN (
    SELECT * 
    FROM 
    projected_hours_archive 
    ORDER BY date DESC 
    LIMIT 1 
) AS projected_hours_last ON (projected_hours_last.project_id = projects.id) 

WHERE projected_hours > 0 

GROUP BY projects.id 

Я попытался принять с использованием MySQL Limit LEFT JOIN Subquery after joining, но не был успешным. Если я удалю LIMIT в подзапросе, я получаю слишком много результатов.

ответ

3

использовать group by в подзапросе и получать максимальную дату для каждого проекта.

EDIT: согласно комментарию OP, добавив вторую максимальную дату.

Используется трюк из этого mysql how to get 2nd highest value with group by and in a left join.

SELECT 
    GROUP_CONCAT(projected_hours_last.secondMaxDate, '|', projected_hours_last.number) AS 'projected_last_info' 
FROM 
projects 


LEFT JOIN (
    SELECT project_id, max(date) as maxDate, 
      substring_index(substring_index(group_concat(date order by date desc), ',', 2), ',', -1 
          ) as secondMaxDate 
    FROM 
    projected_hours_archive 
    group by project_id 
) AS projected_hours_last ON (projected_hours_last.project_id = projects.id) 

WHERE projected_hours > 0 

GROUP BY projects.id 
+0

Извините, что я забыл положить это - я пытаюсь получить вторую с последней даты. –

+0

@meder, есть трюк из этого поста, чтобы получить второй, http://stackoverflow.com/questions/17765752/mysql-how-to-get-2nd-highest-value-with-group-by-and- в-левой присоединиться. обновил ответ, поскольку данных там нет, не удалось попробовать. – radar