0

私は 2 つのテーブルを持っておりCustomerMasterEntBookings今では顧客ごとに、テーブルにそれぞれの予約の記録がありEntBookingsます。私が欲しいのは、すべての顧客の予約の最初の日付を見つけることです。

私が試したこと、

SELECT cm.CustomerCode,
       cm.CustomerName,
       MIN(eb.BookingDate) OVER(PARTITION BY eb.BookingByCustomer)
FROM   EntBookings eb
       INNER JOIN CustomerMaster cm
            ON  cm.CustomerCode = eb.BookingByCustomer
GROUP BY
       cm.CustomerCode,
       cm.CustomerName,
       eb.BookingByCustomer,
       eb.BookingDate 

結果は次のようになります

Cust1   ABC     2013-01-24 00:00:00.000
Cust2   ABCD    2013-01-24 00:00:00.000
Cust2   ABCD    2013-01-24 00:00:00.000
Cust3   BCD     2013-01-25 00:00:00.000
Cust4   BCDE    2013-01-24 00:00:00.000
Cust7   DEF     2013-01-02 00:00:00.000

の理由がわかりませんがCust2、2行表示されていますか? 1行だけ返すようにするにはどうすればよいですか?

こうすれば..

SELECT cm.CustomerCode,
       cm.CustomerName,
       MIN(eb.BookingDate) OVER(PARTITION BY eb.BookingDate)
FROM   EntBookings eb
       INNER JOIN CustomerMaster cm
            ON  cm.CustomerCode = eb.BookingByCustomer
GROUP BY
       cm.CustomerCode,
       cm.CustomerName,
       eb.BookingByCustomer,
       eb.BookingDate 

私はこれを得る...

Cust7   DEF     2013-01-02 00:00:00.000
Cust1   ABC     2013-01-24 00:00:00.000
Cust2   ABCD    2013-01-24 00:00:00.000
Cust4   BCDE    2013-01-24 00:00:00.000
Cust3   BCD     2013-01-25 00:00:00.000
Cust2   ABCD    2013-02-13 00:00:00.000

この場合、私はまだ の 2 行を取得していますがCust2、日付が間違っています。(最初のケースのように) そうあるべきですが、2013-01-24 00:00:00.0002 行が返されています。したがって、これらのクエリは両方とも正しくありません。誰かが私が間違っていることを理解するのを手伝ってくれますか?

4

1 に答える 1

2

あなたは物事を複雑にし、グループ化しすぎています。顧客コードと名前だけでグループ化したいようです。

SELECT 
     cm.CustomerCode, 
     cm.CustomerName, 
     MIN(eb.BookingDate) 
 FROM 
      EntBookings eb
 JOIN
      CustomerMaster cm     ON       
       cm.CustomerCode = eb.BookingByCustomer
 GROUP BY
       cm.CustomerCode, cm.CustomerName
于 2013-01-25T07:26:27.183 に答える