1

今週、今月、今年の販売された製品の数 (3 つの個別の列) を週初日、月初日、年初日スケールで取得するクエリを作成しています。たとえば、月曜日以降に販売された製品が表示されます。 、月の最初と年の最初から、これは次の週、月、年に続いて、昨年と同じロジックを持つ他の 3 つの列もあります。私が必要としているのは、DATEADD または DATEDIFF (例 (DATEADD(minute, -15, GETDATE()))) を使用して日付クエリを取得することです。

どうもありがとうございました。また、SQL Server 2008 を使用しています。

4

2 に答える 2

2

おそらく最適化される可能性がありますが、正しい方向に進むはずのテストされていないコードを次に示します。これは、PIVOT操作を使用して行を列に変換します。

SELECT WeekCount, MonthCount, YearCount
FROM
(
SELECT ProductId, 
    CASE
        WHEN ProductSoldDate >= DATEADD(dd, 1 - DATEPART(dw, GETDATE()), GETDATE())
        THEN 'WeekCount'
        WHEN ProductSoldDate >= DATEADD(mm, DATEDIFF(mm,0,GETDATE()), 0)
        THEN 'MonthCount'
        WHEN ProductSoldDate >= DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0)
        THEN 'YearCount'
    END as lbl
FROM Products 
) ProductSales
PIVOT
(
COUNT(ProductId)
FOR lbl IN ([WeekCount], [MonthCount], [YearCount])
) t

これがSQL Fiddleです。

幸運を。

于 2013-01-16T20:20:49.020 に答える
0

DATEADD関数の使用

状況によっては、DATETIMEまたはSMALLDATETIME値に時間間隔を追加したり、時間間隔を減算したりすることができます。たとえば、特定の日付から1か月を加算または減算する必要がある場合があります。DATEADD関数を使用して、この計算を実行できます。この関数は次の構文を取ります。

DATEADD(date / time_part、number、date)

例:

SELECT OrderDate, DATEADD(mm, 3, OrderDate) AS NewDate
FROM Sales.Orders
WHERE OrderID = 1001

DATEDIFF関数の使用

DATEDIFF関数は、2つの日付間の時間間隔を計算し、間隔を表す整数を返します。この関数は次の構文を取ります。

DATEDIFF(date / time_part、start_date、end_date)

例:

SELECT OrderDate, DelivDate,
    DATEDIFF(hh, OrderDate, DelivDate) AS HoursDiff
    FROM Sales.Orders
    WHERE OrderID = 1002
于 2013-01-16T20:12:23.163 に答える