私はMSSQLのデータベースからデータを取得しています。このデータのうち、私はクライアントエントリを作成した人と、このクライアントから最初の支払いを受けた人を決定したいと考えています。クエリの結果が多すぎます
クライアントには、1回の予約/照会で複数の支払いエントリが存在する可能性があり、現時点では各支払いの結果が表示されます。最初の支払いエントリのみを表示するように出力を制限するにはどうすればよいですか?
マイクエリ:
SELECT
c.FirstName,
c.LastName,
c.PostalCode,
o.OriginOfEnquiry,
s.SuperOriginName,
c.DateOfCreation,
DATEDIFF(day, c.DateOfCreation, p.DateOfCreation) AS DaysToPayment,
pc.PackageName,
CONCAT(u.FirstName, ' ', u.LastName) AS CreateUser,
(SELECT CONCAT(u.FirstName, ' ', u.LastName)
WHERE u.UserID = p.UserID) AS PaymentUser
FROM tblBookings b
INNER JOIN tblPayments p
ON b.BookingID = p.BookingID
INNER JOIN tblEnquiries e
ON e.EnquiryID = b.EnquiryID
INNER JOIN tblCustomers c
ON c.CustomerID = e.CustomerID
INNER JOIN tblOrigins o
ON o.OriginID = e.OriginID
INNER JOIN tblSuperOrigins s
ON s.SuperOriginID = o.SuperOriginID
INNER JOIN tblBookingPackages bp
ON bp.bookingID = p.BookingID
INNER JOIN tblPackages pc
ON pc.PackageID = bp.packageID
INNER JOIN tblUsers u
ON u.UserID = c.UserID
WHERE c.DateOfCreation >= '2016-06-01' AND c.DateOfCreation < '2016-06-30'
AND p.PaymentStatusID IN (1,2)
AND e.CustomerID = c.CustomerID
AND p.DeleteMark != 1
AND c.DeleteMark != 1
AND b.DeleteMark != 1
;
私はPaymentUserのためのネストされたSELECTステートメントに "TOP 1" を追加しようとしたが、それは何の違いが行われていません。
ここから始めましょう。 http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –
'top 1'で' cross apply'を使うことができます: 'FROM tblBookings bが適用されます(tblPayments pからb.BookingID = p.BookingIDのトップ1を選択してください)。pは –
です。いくつかのテーブルを含む質問をするときに使うもう1つのツールです。 http://sqlfiddle.com/。あなたのスキーマとデータが分からなければ、 'TOP 1'を最初のselectに入れて、' c.DateOfCreation'でクエリ全体を並べます。 – squillman