我爲我的問題準備了一個sql小提琴。 Here it is這裏有一個工作代碼。我在問是否存在我沒有想到的替代解決方案。GroupBy關於另一張桌子上的記錄間隔
CREATE TABLE [Product]
([Timestamp] bigint NOT NULL PRIMARY KEY,
[Value] float NOT NULL
)
;
CREATE TABLE [PriceTable]
([Timestamp] bigint NOT NULL PRIMARY KEY,
[Price] float NOT NULL
)
;
INSERT INTO [Product]
([Timestamp], [Value])
VALUES
(1, 5),
(2, 3),
(4, 9),
(5, 2),
(7, 11),
(9, 3)
;
INSERT INTO [PriceTable]
([Timestamp], [Price])
VALUES
(1, 1),
(3, 4),
(7, 2.5),
(10, 3)
;
查詢:
SELECT [Totals].*, [PriceTable].[Price]
FROM
(
SELECT [PriceTable].[Timestamp]
,SUM([Value]) AS [TotalValue]
FROM [Product],
[PriceTable]
WHERE [PriceTable].[Timestamp] <= [Product].[Timestamp]
AND NOT EXISTS (SELECT * FROM [dbo].[PriceTable] pt
WHERE pt.[Timestamp] <= [Product].[Timestamp]
AND pt.[Timestamp] > [PriceTable].[Timestamp])
GROUP BY [PriceTable].[Timestamp]
) AS [Totals]
INNER JOIN [dbo].[PriceTable]
ON [PriceTable].[Timestamp] = [Totals].[Timestamp]
ORDER BY [PriceTable].[Timestamp]
結果
| Timestamp | TotalValue | Price |
|-----------|------------|-------|
| 1 | 8 | 1 |
| 3 | 11 | 4 |
| 7 | 14 | 2.5 |
在這裏,我的第一臺[產品]包含時間戳不同的產品價值。第二個表[PriceTable]包含不同時間間隔的價格。一個給定的價格是有效的,直到設置新的價格。因此,時間戳1的價格對於時間戳1和2的產品有效。
我試圖根據給定價格獲得產品總數。小提琴上的SQL產生了我所期望的。
有更聰明的方法來獲得相同的結果嗎?
順便說一句,我使用的SQLServer 2014
請從小提琴發佈所有表格DDL並在此處提供數據示例。 'SQLFiddle'只是幫助我們幫助你的另一個工具。 – sagi
加上一個爲你的努力..好 – tharif
我將嘗試這些解決方案的實際數據。無論如何謝謝 –