2013-03-09 38 views
0

我已經加入了MySQL查詢中的幾個表,並且它們通過員工ID號鏈接。限制每個ID一行(MySQL)

ID號在表A和B中是唯一的,但在表C中有多行,並且每個條目的日期(存儲爲字符串)都是唯一的。

我需要確定表C和LIMIT表C中每個員工ID號的最近日期,每個ID號(最近顯然)爲一個條目。

我不確定如何將每個員工ID號碼的LIMIT設置爲1。

您的幫助表示讚賞。

+1

[救援手冊](http://dev.mysql.com/doc/refman/5./en/example-maximum-column-group-row.html)(是的,我承認這很難找到)。 – Wrikken 2013-03-09 21:14:52

+0

我檢查了手冊並沒有看到在另一個字段中爲每個實例聲明一行的方法。林只是想知道如果這裏有一個不同的功能我在這裏失蹤。 – 2013-03-09 21:25:03

+0

不是在MySQL中沒有(我相信PostreSQL中有一個),實際上,我指出你的鏈接已經是答案(放棄你的「限制」,這已經以其他方式保證了)。 – Wrikken 2013-03-09 21:28:03

回答

2

查詢下面使用子查詢得到每EmployeeIDtableC每個最近日期

SELECT a.*, b.*, c.* 
FROM tableA a 
     INNER JOIN tableB b 
      ON a.EmployeeID = b.EmployeeID 
     INNER JOIN tableC c 
      ON a.EmployeeID = c.EmployeeID 
     INNER JOIN 
     (
      SELECT EmployeeID, MAX(date) max_date 
      FROM tableC 
      GROUP BY EmployeeID 
     ) d ON c.EmployeeID = d.EmployeeID AND 
       c.Date = d.max_date 
+0

感謝您的迴應。在閱讀上面的Wrikkens文章鏈接後,我能夠在WHERE子句中查找子查詢。儘管我使用了LEFT JOIN而不是INNER JOIN。 – 2013-03-09 23:19:08

0

從我明白你的問題:

select a.*, b.*, max(c.date) from A 
    inner join B on A.id=B.id 
    inner join C on A.id=C.id 
    group by A.id 

這組記錄由A.即的ID,你會得到一個行中的每一行的響應A(因爲它們由該ID唯一標識)。 B發生同樣的事情,因爲他們有相同的ID。然後,在C中,A中每個記錄有多個記錄,因此將它們分組並獲取日期的最大值將僅返回每個A的C日期(每種情況下它們的最大值)。

+0

我遵循你的邏輯在這裏,但是通過聲明max(c.date)會不會只返回整個字段中的單個最大日期?或者是不是這樣,因爲它是由a.id分組的?我認爲不管怎樣都會生病。 – 2013-03-09 23:22:38

+0

它將返回最大日期,並且由於您按照A.id進行分組,所以將返回該特定A.id的最大日期(據我瞭解的是您正在查找的日期) – 2013-03-10 09:50:20