T-SQL将“小于”解释为“小于或等于”

时间:2017-06-23 18:46:19

标签: tsql

这是SQL查询的一部分,旨在识别是否针对特定系列触发了“Nelson Rules”(请参阅​​统计过程控制)。

在本节中,当前和前五个值分别为34,33,30,27,27,26,26和24时,返回“六个(或更多)点不断增加或减少”的结果。

这不是我的意图,并向我建议T-SQL将“小于”符号解释为“小于或等于”。

manage.py shell

1 个答案:

答案 0 :(得分:0)

我已使用您提供的值快速测试您的查询。我得到了你期望的结果(即所有行都为null)。

这是一个简短的测试案例。

首先,我创建了一个包含Trucks列和日期列的表:

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

由于您得到了不同的结果,我最好猜测您的[Trucks]列是近似数字数据类型,例如float或real。我建议您检查[Trucks]列的数据类型,看看是否是这种情况。