2013-02-17 33 views
2

這個問題在歷史上第一次沒有提出,但我還沒有找到任何有用的。假設用戶(A,B,C)可以有更多的任務(清理,維護,編程),任務可以有狀態(啓動,暫停,暫停,完成)。Mysql,只加入第一個連接記錄 - 通過日期

SELECT username,tasks.id,subject,dateat,state FROM users 
LEFT JOIN tasks ON tasks.owner_id = users.id 
LEFT JOIN tasks_histories ON tasks_histories.task_id = tasks.id 
ORDER BY username ASC, subject asc, dateat desc; 
select * from tasks_histories; 

所以有多個任務狀態,我只需要前,根據「dateat」 - 也許我想第一個或最後一個記錄。我試圖使用GROUP BY username,subject form,但它不會看dateat排序。

編輯:

假設A沒有任務,B有兩個任務:TASK1一個狀態,TASK2有3個狀態。

所以這個返回它:

user taskid subject dateat state 
A  null null  null null 
B  9  task1 2011 5 
B  10  task2 null null 
B  8  task3 2011 1 
B  8  task3 2012 5 
B  8  task3 2013 3 

但我想它:

A  null null  null null 
B  9  task1 2011 5 
B  10  task2 null null 
B  8  task3 2011 1 

A  null null  null null 
B  9  task1 2011 5 
B  10  task2 null null 
B  8  task3 2013 3 
+0

什麼是包含'dateat'表? – 2013-02-17 12:19:38

回答

1

假設列dateat位於表tasks_histories,以下會查詢根據返回最新任務的結果。

SELECT username, 
     tasks.id, 
     subject, 
     dateat, 
     STATE 
FROM users 
     INNER JOIN tasks 
      ON tasks.owner_id = users.id 
     INNER JOIN tasks_histories 
      ON tasks_histories.task_id = tasks.id 
     INNER JOIN 
     (
      SELECT task_id, MAX(dateat) max_date 
      FROM tasks_histories 
      GROUP BY task_id 
     ) a ON tasks_histories.task_id = a.task_id AND 
       tasks_histories.dateat = a.max_date 
ORDER BY username ASC, subject ASC, dateat DESC; 

更新1

SELECT x.*, y.* 
FROM users x 
     LEFT JOIN 
     (
      SELECT a.owner_id, a.subject, 
        b.dateat, b.state 
      FROM tasks a 
        INNER JOIN tasks_histories b 
         ON b.task_id = a.ID 
        INNER JOIN 
        (
         SELECT task_id, MAX(dateat) max_date 
         FROM tasks_histories 
         GROUP BY task_id 
        ) c ON b.task_id = c.task_id AND 
          b.dateat = c.max_date 
     ) y ON x.id = y.owner_id 
+0

似乎沒問題。我忘了說,我也需要那些沒有任何國家的任務(沒開始) – 2013-02-17 12:24:16

+0

你能給樣本記錄以期望的結果嗎?如何將'INNER'改爲'LEFT'加入? – 2013-02-17 12:24:48

+0

編輯,對不起.. – 2013-02-17 12:42:03