現在、オファーに関する SQL クエリの作成に取り組んでいます。
基本的に、オファーには開始日と終了日があります。
シナリオ 1: ユーザーは開始日のみを指定します。
解決策 1: すべてのオファーは、その日以降に開始される表示です。
シナリオ 2: ユーザーは TO の日付のみを指定します。
解決策 2: 指定された日付以前に終了するすべてのオファーが表示されます。
シナリオ 3: ユーザーが TO と FROM の両方の日付を指定して検索します。
解決策 3 の問題は次のとおりです。
オファー - 2012 年 1 月 1 日から 2012 年 3 月 3 日まで
検索 - 2012 年 1 月 1 日から 2012 年 2 月 2 日まで
オファーは、2 つの検索値の間にあるため、クエリで返されるはずです。
私の現在のクエリは以下のとおりですが、必要に応じて機能していません。
CREATE PROCEDURE [dbo].[GetAllOffers]
@retailer_id BIGINT,
@opt_in BIGINT,
@use_once BIGINT,
@from_date DATETIME,
@to_date DATETIME
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
SET NOCOUNT ON;
SELECT retr.Name,
reco.Headline,
reco.isOptIn,
reco.isUseOnce,
reco.DateValidFrom,
reco.DateExpires,
reco.Id AS OfferId
FROM RetailerCoupon reco
INNER JOIN Retailer retr
ON reco.RetailerId = retr.Id
WHERE (reco.RetailerId = @retailer_id
OR @retailer_id IS NULL)
AND (reco.isOptIn = @opt_in
OR @opt_in IS NULL)
AND (reco.isUseOnce = @use_once
OR @use_once IS NULL)
AND (reco.DateValidFrom >= @from_date
OR @from_date IS NULL)
AND (reco.DateExpires <= @to_date
OR @to_date IS NULL)
ORDER BY retr.Name
END
GO
シナリオ 1 と 2 は、問題を引き起こしている 3 より上のクエリでカバーされていることに注意してください。
スティーブン