2010-11-17 114 views
1

這是問題所在。我需要改變這個查詢來獲得正確的信息,我不知道如何。MYSQL查詢最新條目

數據庫信息

Id | Client_Code | Time_Date   | Employee_Name | Date_Time | Time_Stamp 
    1 | 000010  | 2010-11-17 07:45:00| Jerry   | 2010-11-17| 07:45 AM 
    2 | 000022  | 2010-11-17 07:30:00| Jerry   | 2010-11-17| 07:30 AM 
    3 | 000010  | 2010-11-17 16:00:00| Bill   | 2010-11-17| 04:00 PM 
    4 | 000022  | 2010-11-17 16:00:00| Bill   | 2010-11-17| 04:00 PM 

下面是該查詢

$sql = "SELECT Client_Code, MAX(TIME(Time_Date)), Employee_Name, Date_Time, Time_Stamp FROM Transaction WHERE Date_Time = CURdate() 
        AND Time_Stamp != '' GROUP BY Client_Code"; 

這裏是我得到這個查詢和phpcode

echo " $row[Employee_Name], $row[Client_Code], ".$row['MAX(TIME(Time_Date))']."<br>"; 
Jerry, 000010, 16:00:00 
Bill, 000022, 16:00:00 

出於某種原因,是它給我的權利16:00:00但是這段時間沒有給我正確的員工姓名。它與我認爲的分組有關,但該組必須首先由client_code進行,因爲我需要每個Client_Code的最新條目。另外,我不能使用ID進行分組,因爲輸入並不總是按順序排列。這是應該看起來像什麼。

Bill, 000010, 16:00:00 
Bill, 000022, 16:00:00 

誰能告訴我如何解決此查詢以獲取正確的信息,請。同樣,一旦mysql查詢得到糾正,我們需要它計算每個員工並顯示結果。

Bill, 2 
+0

你能澄清你的問題?你究竟想要得到什麼? – eykanal 2010-11-17 16:06:47

+0

是不是日期值重複? – MatTheCat 2010-11-17 16:09:30

+0

如果追加到查詢ORDER BY MAX(TIME(Time_Date)),那麼該做什麼? – 2010-11-17 16:11:35

回答

4

使用自聯接:

SELECT x.client_code, 
     TIME(x.time_date) 
     x.employee_name, 
     x.date_time, 
     x.time_stamp 
    FROM TRANSACTION x 
    JOIN (SELECT t.client_code, 
       MAX(t.time_date) AS max_time_date 
      FROM TRANSACTION t 
     WHERE t.date_time = CURRENT_DATE 
      AND t.time_stamp != '' 
     GROUP BY t.client_code) y ON y.client_code = x.client_code 
           AND y.max_time_date = x.time_date 
WHERE x.date_time = CURRENT_DATE 
    AND x.time_stamp != '' 
+0

我如何添加一個計數到這個,所以我得到每個員工的計數? – Eric 2010-11-17 17:30:43

+0

以現有的查詢與和圍繞着它:SELECT employee_name,COUNT(*)FROM(查詢從上面)一個 – Leslie 2010-11-17 18:03:31

+0

@Eric:算什麼柱? – 2010-11-17 18:05:49

0

你必須「按id降序極限0,1令」添加到您的查詢,也可以嘗試mysql_last_insert_id

+0

有人隨時可以在最近的時間之後輸入新數據給它一個更高的ID號碼,然後是實際最近的時間輸入。那也行不通。希望是那麼簡單。 – Eric 2010-11-17 16:27:33