2017-09-15 109 views
0

我无法让自己的脑袋围绕此操作所需的逻辑。我有数据为多个帐户运行月份。我想指定输出使用SQL Server 2016正确的逻辑为特定帐户划出一片时间

我想排除 2017年9月14日14:30和2017年9月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 

我想包括在特定时间内不在特定帐户上的所有数据。也许维恩图将有助于

venn

蓝色区域是数据我不想一切,包括在其他时候所提到的帐户和所有其他帐户在提及的时候,我想保持。

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

+1

https://blog.codinghorror.com/rubber-duck-problem-solving/,有人张贴面条DBA链接了。 –

+0

你能否提供一些样本数据和输出?目前还不清楚该逻辑应该如何工作。 – EricZ

回答

0

条件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 
0

您可以使用此

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

虽然这不会为其他帐户返回行。 OP没有真正指定他们是否想要其他账户返回或没有,虽然所以没有伤害:) – scsimon

+0

@scsimon你是对的,目前还不清楚OP如何要其他账户。一旦OP澄清,我会更新或删除这个答案。 – EricZ

+0

对不起ericz我已经更新了这个问题,希望它更清楚一点。 – tomdemaine