2010-11-17 4 views
1

Voici le problème. J'ai besoin de transformer cette requête pour obtenir la bonne information et je ne sais pas comment.MYSQL Interrogation entrée la plus récente

informations de base de données

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 

Voici la requête

$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"; 

Voici ce que je reçois cette requête et phpcode

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

Pour une raison oui sa me donner le droit 16:00:00 Heure, mais cela ne me donne pas le bon nom d'employé avec ce temps. Je pense que cela a quelque chose à voir avec le groupement, mais le groupe doit d'abord être client_code car je veux l'entrée la plus récente pour chaque code client. De plus, je ne peux pas utiliser l'ID pour le regroupement car les entrées ne sont pas toujours en ordre. Voici à quoi devrait ressembler.

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

Quelqu'un peut-il me dire comment résoudre cette question pour obtenir l'information correcte s'il vous plaît. Aussi, une fois la requête mysql corrigée, j'ai besoin de compter chaque employé et afficher les résultats comme ça.

Bill, 2 
+0

Pouvez-vous préciser votre question ? Qu'est-ce que vous essayez d'obtenir exactement? – eykanal

+0

Les valeurs de date ne sont-elles pas dupliquées ?? – MatTheCat

+0

Si vous ajoutez à la requête ORDER BY MAX (TIME (Time_Date)), qu'est-ce que cela fait? –

Répondre

4

Utilisez une jointure réflexive:

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

Comment est-ce que j'ajouterais un compte à ceci donc j'obtiens le compte pour chaque employé? – Eric

+0

Prenez cette requête existante et entourez-la avec: SELECT nom_utilisateur, compte (*) FROM (requête de dessus) A – Leslie

+0

@Eric: Comptez quelle colonne? –

0

Vous devez ajouter « par ordre limite id desc 0,1 » à votre requête ou vous pouvez essayer de mysql_last_insert_id

+0

Quelqu'un peut à tout moment entrer de nouvelles données derrière l'heure la plus récente en lui donnant un numéro d'identification plus élevé que l'entrée de temps la plus récente. Cela ne fonctionnera pas non plus. J'aurais aimé que ce soit aussi facile. – Eric

Questions connexes