1

1 週間に 3 つ以上の注文があり、2013 年 9 月 1 日以降に送信された注文のみを含む行のみを返すクエリを作成しようとしています。

SELECT OrderID, DateSubmitted, ObjectID = i.ObjectID
FROM dbo.Object i
JOIN dbo.Order j
ON i.ObjectID = j.ObjectID
WHERE DateSubmitted >= '9/1/2013'

1 週間に 3 つ以上の注文があるオブジェクトに結果を絞り込む方法がわかりません。私は多くの節を試しましたGROUP BYHAVING、運がありませんでした。どんな助けでも大歓迎です。

4

4 に答える 4

1

よくわかりませんが、テーブルに関する詳細情報が必要です。最良の推測はSQLにあります

SELECT count(OrderID), i.ObjectID
FROM dbo.Object i
JOIN dbo.Order j
ON i.ObjectID = j.ObjectID
group by i.ObjectID
having  DateSubmitted >= '9/1/2013' and count(OrderID)>2
于 2013-10-22T20:49:33.813 に答える
1

試す:

SELECT ObjectID 
FROM dbo.Object i
JOIN dbo.Order j ON  J.ObjectID = i.ObjectID
WHERE DateSubmitted >= '9/1/2013'
GROUP BY ObjectID 
HAVING COUNT(1) >=3
于 2013-10-22T20:47:33.487 に答える
0

複雑ですが、これであなたが望むものを手に入れることができると思います...

With    WeekSets As
(
        Select  i.ObjectID,
                j.DateSubmitted, 
                j2.OrderID
        From    dbo.Object i
        JOIN    dbo.Order j
                ON  i.ObjectID = j.ObjectID
        JOIN    dbo.Order j2
                On  j.DateSubmitted <= j2.DateSubmitted
                And j2.DateSubmitted < DateAdd(Day,7,j.DateSubmitted)
                And j.ObjectID = j2.ObjectID
        WHERE   j.DateSubmitted >= '9/1/2013'
),      GroupsOfThree As
(
        Select  ObjectID,
                DateSubmitted
        From    WeekSets
        Group   By  ObjectID,
                    DateSubmitted
        Having  Count(OrderID) >= 3
)
Select  Distinct j.OrderID, 
        j.DateSubmitted, 
        w.ObjectID
From    GroupsOfThree g
Join    WeekSets w
        On  g.ObjectID = w.ObjectID
        And g.DateSubmitted = w.DateSubmitted
Join    dbo.Order j
        On  w.ObjectID = j.ObjectID
        And w.OrderID = j.OrderID
于 2013-10-22T22:02:37.273 に答える
0

最後のコメントに基づいて、探しているクエリは非常に単純です。DatePart 関数を使用して、そのオブジェクトの注文日の WEEK を調べます。以下のクエリを確認してください。また、データベースがデフォルトですでに構成されていない限り、Sunday(int 7) は SQL サーバーで設定された最初の日です。したがって、このクエリの目的では、Monday(int 1) を週の最初の曜日として設定する必要があります。実行することで現在の設定を確認できます SELECT @@DATEFIRST

同じオブジェクトが以下の複数の週に 3 回以上配置されている場合、クエリはその週ごとにそのオブジェクトを返します。オブジェクトのみが必要な場合は、結果セットから weekNumber をスキップして、Distinct ObjectID を実行できます。

END で DATEFIRST 設定を元の値にリセットすることを忘れないでください。

    DECLARE @Object TABLE
    (
        objectID        INT
    )
    DECLARE @Order TABLE
    (
        orderID         INT
        ,objectID       INT
        ,DateSubmitted  DATE    
    )

    INSERT INTO @Object( objectID )
    SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6

    INSERT INTO @Order ( orderID, objectID, DateSubmitted )
                SELECT 1,1,'10/2/2013'
    UNION ALL   SELECT 2,1,'10/3/2013'
    UNION ALL   SELECT 3,1,'10/5/2013'

    UNION ALL   SELECT 4,1,'10/09/2013'
    UNION ALL   SELECT 5,1,'10/10/2013'
    UNION ALL   SELECT 6,1,'10/13/2013'

    UNION ALL   SELECT 4,2,'10/15/2013'
    UNION ALL   SELECT 5,2,'10/16/2013'
    UNION ALL   SELECT 6,2,'10/21/2013'

    UNION ALL   SELECT 7,3,'09/02/2013'
    UNION ALL   SELECT 8,3,'09/03/2013'
    UNION ALL   SELECT 9,3,'09/04/2013'




    DECLARE @CurrentDateFirst INT=@@DATEFIRST
    SET DATEFIRST 1;
    SELECT i.objectID,DATEPART(week,DateSubmitted) AS weekNumber 
    FROM @Object i
    JOIN @Order j
    ON i.ObjectID = j.ObjectID
    WHERE DateSubmitted >= '9/1/2013'
    GROUP BY i.objectID,DATEPART(week,DateSubmitted)
    HAVING(COUNT(DISTINCT orderID) >= 3)
    ORDER BY i.objectID
    SET DATEFIRST @CurrentDateFirst

ここに画像の説明を入力

于 2013-10-25T21:03:46.690 に答える