MYSQL查询最近的条目

时间:2010-11-17 16:00:01

标签: php sql 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

2 个答案:

答案 0 :(得分: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 != ''

答案 1 :(得分:0)

您必须在查询中添加“按ID desc limit 0,1排序”,或者您可以尝试mysql_last_insert_id