1
要了解車輛租賃與車輛佔用/空閒時間,我想創建一個時間矩陣(用於SSAS立方體中)。SQL樞軸時間表矩陣
下面的租金部分的可用數據:
現在我想這個數據轉動到以下結果。顯示每小時車輛租賃的分鐘數。
在正確的SQL語法來實現這一結果將是巨大的任何幫助。
要了解車輛租賃與車輛佔用/空閒時間,我想創建一個時間矩陣(用於SSAS立方體中)。SQL樞軸時間表矩陣
下面的租金部分的可用數據:
現在我想這個數據轉動到以下結果。顯示每小時車輛租賃的分鐘數。
在正確的SQL語法來實現這一結果將是巨大的任何幫助。
我認爲你可以使用CTE收集24小時,使用CASE
實現這樣您預期的結果:
;WITH HoursAll(H) AS (
SELECT 0
UNION ALL
SELECT H + 1
FROM HoursAll
WHERE H < 23
)
SELECT t.date, t.vehicle, CAST((CAST(ha.H As varchar(10)) + ':00') As time) as [hour]
, CASE
WHEN ha.H = DATEPART(HOUR,t.starttime) THEN 60 - DATEPART(MINUTE,t.starttime)
WHEN ha.H = DATEPART(HOUR,t.endtime) THEN DATEPART(MINUTE,t.endtime)
ELSE 60
END
FROM HoursAll ha
JOIN yourTable t ON ha.H BETWEEN DATEPART(HOUR,t.starttime) AND DATEPART(HOUR,t.endtime);
CREATE FUNCTION [dbo].GetTime (@Start TIME, @End TIME)
RETURNS @TableTime TABLE(_HH TIME, _MM INT)
AS
BEGIN
WHILE DATEPART(HH, @Start) <= DATEPART(HH, @End)
BEGIN
INSERT INTO @TableTime
SELECT DATEPART(HH, @Start), 60
SET @Start = CAST(DATEADD(HH,1,@Start) AS TIME)
END
UPDATE @TableTime SET _MM = 60 - DATEPART(MINUTE, @Start) WHERE _HH = DATEPART(HH, @Start)
UPDATE @TableTime SET _MM = DATEPART(MINUTE, @End) WHERE _HH = DATEPART(HH, @End)
END
SELECT DATE, VEHICLE CROSS APPLY GetTime(Starttime, Endtime) G
爲什麼的第一行時間08:00有5分鐘?你能解釋一下如何從「starttime」和endtime計算分鐘嗎? –
車輛啓動時間爲8點55分,因此在第8小時的第55分鐘內沒有租金。只有8分鐘內的最後5分鐘是租賃分鐘。 – phicon