2017-06-23 64 views
0

這是SQL查詢的一部分,用於確定特定觸發「納爾遜規則」(請參閱​​統計過程控制)系列。T-SQL正在將「小於」解釋爲「小於或等於」

在本節中,當前和前五個值分別爲34,33,30,27,27,26,26和24時,返回結果「六(或更多)點不斷增加或減少」。

這不是我想要的,並且向我暗示,T-SQL將「少於」符號解釋爲「小於或等於」。

case when (TRUCKS<(lag(Trucks,1) over (order by [date]))  and (lag(Trucks,1) over (order by [date]) < lag(Trucks,2) over (order by [date])) 
     and (lag(Trucks,2) over (order by [date]) < lag(Trucks,3) over (order by [date])) and (lag(Trucks,3) over (order by [date]) < lag(Trucks,4) over (order by [date])) 
     and (lag(Trucks,4) over (order by [date]) < lag(Trucks,5) over (order by [date]))) 

     OR 

     (TRUCKS>(lag(Trucks,1) over (order by [date])) and (lag(Trucks,1) over (order by [date]) > lag(Trucks,2) over (order by [date])) 
     and (lag(Trucks,2) over (order by [date]) > lag(Trucks,3) over (order by [date])) and (lag(Trucks,3) over (order by [date]) > lag(Trucks,4) over (order by [date])) 
     and (lag(Trucks,4) over (order by [date]) > lag(Trucks,5) over (order by [date]))) 

     THEN 'Six (or more) points continually increasing or decreasing' 

     else null end as Rule_Three 
+0

您能否提供'Trucks'和'Date'中數值的樣本數據集? – PicoDeGallo

回答

0

我已經使用您提供的值快速測試了您的查詢。我得到你期待的結果(即所有行都爲空)。

這是一個簡短的測試案例。

首先,我創建了一個表,一卡車列和日期列:

USE [YourDatabase] 
GO 

CREATE TABLE [dbo].[TrucksTable](
    [Trucks] [int] NULL, 
    [date] [datetime] NULL 
) ON [PRIMARY] 

GO 

我然後插入你已經在你的問題中提到的值:

INSERT INTO TrucksTable (Trucks, [date]) 
VALUES 
(34, '2017-06-25'), 
(33, '2017-06-24'), 
(30, '2017-06-23'), 
(27, '2017-06-22'), 
(27, '2017-06-21'), 
(26, '2017-06-20'), 
(26, '2017-06-19'), 
(24, '2017-06-18') 

,最後我執行此查詢對我的新創建的表來測試你的表達:

SELECT 
    Trucks, 
    [date], 
    lag(Trucks,1) over (order by [date]) AS Lag1, 
    lag(Trucks,2) over (order by [date]) AS Lag2, 
    lag(Trucks,3) over (order by [date]) AS Lag3, 
    lag(Trucks,4) over (order by [date]) AS Lag4, 
    lag(Trucks,5) over (order by [date]) AS Lag5, 
    CASE 
     WHEN (TRUCKS<(lag(Trucks,1) over (order by [date])) 
      and (lag(Trucks,1) over (order by [date]) < lag(Trucks,2) over (order by [date])) 
      and (lag(Trucks,2) over (order by [date]) < lag(Trucks,3) over (order by [date])) 
      and (lag(Trucks,3) over (order by [date]) < lag(Trucks,4) over (order by [date])) 
      and (lag(Trucks,4) over (order by [date]) < lag(Trucks,5) over (order by [date]))) 
      OR 
      (TRUCKS>(lag(Trucks,1) over (order by [date])) 
      and (lag(Trucks,1) over (order by [date]) > lag(Trucks,2) over (order by [date])) 
      and (lag(Trucks,2) over (order by [date]) > lag(Trucks,3) over (order by [date])) 
      and (lag(Trucks,3) over (order by [date]) > lag(Trucks,4) over (order by [date])) 
      and (lag(Trucks,4) over (order by [date]) > lag(Trucks,5) over (order by [date]))) 
    THEN 'Six (or more) points continually increasing or decreasing' 
    ELSE NULL END AS Rule_Three 
FROM TrucksTable 

結果是這樣的: Query result

既然你得到了不同的結果,我最好猜測你的[卡車]列是一個近似數字的數據類型,如浮點數或實數。我建議你檢查你的[卡車]欄的數據類型,看看是否是這種情況。

+0

非常感謝 - 幫助並標記爲答案。 – Statsanalyst