2016-04-27 10 views
2

tbservicecallallocationという名前のテーブルが1つあり、その下にそのテーブルのデータがあります。データ以上のことからWHERE句でMySql MAX()を使用する方法

enter image description here

私は彼らのMAX AllocationTimeと技術者のことをしたいです。画像の下 は enter image description here

は、上記のデータを取得するためのMySQLのSELECTクエリを記述するために私を助けてください..私が望む結果内容を示しています。

答えて

5

各技術者の最大AllocationTimeを返すサブクエリがあります。その結果と参加:

select t1.* 
from tbservicecallallocation t1 
join (select TechnicianIDF, max(AllocationTime) as MAxAllocationTime 
     from tbservicecallallocation 
     group by TechnicianIDF) t2 
    on t1.TechnicianIDF = t2.TechnicianIDF 
    and t1.AllocationTime = t2.MAxAllocationTime 

は、必要に応じて最後にORDER BY句を追加します。

ORDER BY AllocationStatus DESC 
+0

、lad2025 @ 2つの行を試してみ、t2は任意の重複は含まれません。同じ技術者が同じmax(allocationTime)を2回使用すると、両方の行が返されます。 (あなたの質問と同じように) – jarlh

+0

:)はい、あなたは正しいです。 2番目のクエリは、技術者ごとに常に1つの行を返します。 – lad2025

3

あなたは最大AllocationTimeを計算するためにサブクエリを使用することができます。

SELECT * 
FROM tbservicecallallocation t1 
WHERE (TechnicianIDF,AllocationTime) IN 
     (SELECT TechnicianIDF, MAX(AllocationTime) AS AllocationTime 
     FROM tbservicecallallocation 
     GROUP BY TechnicianIDF) 
+1

'@ lad2025'。申し訳ありませんが私は1つの答えを承認することができます。あなたの答えは私にとっても完璧です...しかし、この時間のために申し訳ありません。素晴らしい仕事...。 – Vijay

4

はこれを試してみてください:

SELECT * 
FROM tbservicecallallocation t1 
WHERE NOT EXISTS(
    SELECT 'NEXT' 
    FROM tbservicecallallocation t2 
    WHERE t1.TechnicianIDF = t2.TechnicianIDF 
    AND t2.AllocationTime > t1.AllocationTime 
) 
+0

私は存在しません。 MySQLを実行しているときにjoinクエリより遅いと言う人もいますが、本当ですか? – jarlh

+0

私のために他の声明よりもずっと速いです。他のソリューションでは、サブクエリの複雑さがNOT EXISTSより大きいJOINなどのステートメントが使用されるためです。だからこの文脈ではすべての答えは正しいです –

+0

情報ありがとうございます。 (私はMySQKを使ったことが一度もありませんでした。私は他の人たちが言ったことを読んだだけです。) – jarlh

3

この

select t1.* 
from tbservicecallallocation as t1 inner join 
(
select technicianidf, max(allocationtime) as allocationtime 
     from tbservicecallallocation 
     group by technicianidf 
) as t2 on t1.technicianidf=t2.technicianidf and t1.allocationtime=t2.allocationtime 
+0

私と同じ答え、ちょうど7分後。 – jarlh

+0

ページの更新に問題がある可能性があります。私はページを開いたときに私はあなたのことを見ませんでした:) – Madhivanan

0

この

SELECT * FROM tbservicecallallocation t1 
WHERE (TechnicianIDF,AllocationTime) IN 
    (SELECT TechnicianIDF, MAX(AllocationTime) AS AllocationTime 
    FROM tbservicecallallocation 
    GROUP BY TechnicianIDF) 
+1

ちょうど27分後、lad2025の答えと同じです。 – jarlh

+0

ああ大丈夫です。ちょうど今私が見た@ jarlh – JYoThI

関連する問題