0

Appointment_duration、mechanic_Firstname、mechanic_lastname、customer_firstname、および customer_lastname を最大時間と最小時間で表示する mysql に書き込もうとしていますが、私のコードでは間違った結果が返されます.最大時間と最小時間と対応する名前のみが必要です。だから2列

SELECT 
Min(Appointment.Appointment_duration) AS MINOfAppointment_duration, 
Max(Appointment.Appointment_duration) AS MAXOfAppointment_duration,
mechanic_Firstname, mechanic_lastname, customer_firstname, customer_lastname
FROM Appointment, mechanic, Customer
WHERE (mechanic.mechanic_ID=Appointment.mechanic_ID) AND (customer.customer_ID=Appointment.customer_ID);

予定表のレコード

Appointment_ID  Appointment_DATE    Appointment_Duration    Mechanic_ID Customer_ID
12               08/01/2007     0:35:00                      1            5684
13               01/01/2009     2:15:36                      6            2534
14               06/12/2010     0:05:29                      7            7423
4

2 に答える 2

1

問題は、2 つのテーブルcustomerとの間に関係がないmechanicことです。各テーブルの最大期間と最小期間を個別に取得しUNION ALL、2 つの結果セットを 1 つに結合するために使用する必要があります。何かのようなもの:

SELECT 
  m.mechanic_Firstname AS FirstName, 
  m.mechanic_lastname AS LastName,
  IFNULL(Min(a.Appointment_duration), 0) AS MINOfAppointment_duration, 
  IFNULL(Max(a.Appointment_duration), 0) AS MAXOfAppointment_duration
FROM mechanic AS m
LEFT JOIN Appointment AS a ON a.mechanic_ID = m.mechanic_ID
GROUP BY m.mechanic_Firstname,
         m.mechanic_lastname
UNION ALL
SELECT 
  c.customer_firstname,
  c.customer_lastname,
  IFNULL(Min(a.Appointment_duration), 0), 
  IFNULL(Max(a.Appointment_duration), 0)
FROM customer AS c
LEFT JOIN Appointment AS a ON a.mechanic_ID = c.customer_ID
GROUP BY c.customer_firstname,
         c.customer_lastname;

これにより、4 つの列のみが得られます。

FirstName  |  LastName  |  MINOfAppointment_duration  |  MAXOfAppointment_duration

firstnameすべてのメカニックの名前と顧客の名前が と の 2 つの列にすべてリストされているlastname場合、フラグを追加して、顧客からのメカニックをマークすることができます。

于 2013-03-25T06:46:53.217 に答える
0

関数を使用Union allして、最大値と最小値を見つけることができます。

    SELECT 
    Min(Appointment.Appointment_duration) AS Appointment_duration, 'Min' as status,
    mechanic_Firstname, mechanic_lastname, customer_firstname, customer_lastname
    FROM Appointment, mechanic, Customer
    WHERE (mechanic.mechanic_ID=Appointment.mechanic_ID) 
    AND (customer.customer_ID=Appointment.customer_ID);
Union all
    SELECT  
    Max(Appointment.Appointment_duration) AS  Appointment_duration,'Max' as status,
    mechanic_Firstname, mechanic_lastname, customer_firstname, customer_lastname
    FROM Appointment, mechanic, Customer
    WHERE (mechanic.mechanic_ID=Appointment.mechanic_ID)
    AND (customer.customer_ID=Appointment.customer_ID);
于 2013-03-25T06:43:14.360 に答える