【问题标题】:Correct logic to cut out a slice of time for particular accounts正确的逻辑为特定帐户节省时间
【发布时间】:2018-02-24 17:51:00
【问题描述】:

我无法理解此操作所需的逻辑。我有多个帐户每月运行的数据。我想使用 SQL Server 2016 指定输出在短时间内忽略某些帐户。

我想排除 2017-09-14 14:30 和 2017-09-14 15:30 之间的所有数据,但仅限编号为 310722 310820 106758 310169 的帐户,但我想包含来自这些帐户(以及所有其他帐户)在所有其他时间。

我试过了

WHERE 
([start time] NOT BETWEEN 2017-09-14 14:30 and 2017-09-14 15:30 AND Account NOT IN ( 310722, 310820, 106758, 310169,) )

但这样剪裁太多了。 NOT 和 AND 逻辑把我弄乱了。谁能帮忙?

编辑:

显然我的问题不清楚。道歉。我在附加示例数据时遇到了一些麻烦,但以下是我的最大努力。

Start Time           Type                Connected (secs) Account
13/09/2017 00:02:13 Normal operator call    20            141475
13/09/2017 00:02:15 Normal operator call    59            310523
13/09/2017 00:03:42 Normal operator call    83            833694

我想包含在特定时间不在特定帐户中的所有数据。也许维恩图会有所帮助

蓝色区域是我不想要所有其他数据,包括在其他时间提到的帐户以及在提到的时间我想要保留的所有其他帐户。

如果有人有更详细的建议来让这个问题变得不那么可怕,我会很感激他们。 :)

【问题讨论】:

标签: sql sql-server logical-operators


【解决方案1】:

条件 where 子句怎么样?

WHERE 
     [start time] < CASE WHEN Account in (310722,310820,106758,310169) THEN '2017-09-14 14:30' ELSE DATEADD(DAY,1,GETDATE()) END
  OR [start time] > CASE WHEN Account in (310722,310820,106758,310169) THEN '2017-09-14 15:30' ELSE '1900-01-01' END

【讨论】:

    【解决方案2】:

    你可以用这个

    WHERE 
     NOT ([start time] BETWEEN '2017-09-14 14:30' and '2017-09-14 15:30' AND Account IN ( 310722, 310820, 106758, 310169) )
    

    【讨论】:

    • 这不会返回其他帐户的行。 OP 并没有真正说明他们是否想要退回其他帐户,尽管所以没有伤害:)
    • @scsimon 你是对的,不清楚 OP 如何想要其他帐户。一旦 OP 澄清这一点,我将更新或删除此答案。
    • 抱歉,ericz 我已经更新了这个问题,希望它更清楚一点。
    • @tomdemaine 我的查询应该对你有用,你有机会试试吗?
    猜你喜欢
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多