查询以获取季节特定数据和中性对象

时间:2017-03-22 10:42:19

标签: sql sql-server

我正在尝试创建提供Childerens ID的查询,重要的是我们有季节特定的儿童和中立。 Childrens表有一个名为season的字段,其值可能为0或2

0 means Neutral / Season independet
1 means only for Summer
2 means only for Winter

然后它有4个下一个字段summer_fromsummer_tillwinter_fromwinter_till

我需要获得所有Child对象,它们具有season = 0加上冬季或夏季特定对象。

这是我使用脚本语言动态生成的示例查询。我已尽可能删除了脚本代码。

有没有更好的方法来编写此查询?

SELECT id
FROM Childrens
WHERE id_parent= 2656
## if the parameter 'season' is 1 or 2 then we will access
if(season == 1)
  AND Now() >= summer_from
  AND Now() <= summer_till
elseif ( season == 2 )
  AND Now() >= winter_from
  AND Now() <= winter_till


UNION 

SELECT id
FROM Childrens
WHERE id_parent= 2656
AND season = 0
AND ( 
     ( NOW() >= summer_from AND  NOW() <= summer_till) 
     OR
    ( NOW() >= winter_from AND  NOW() <= winter_till)
)

1 个答案:

答案 0 :(得分:0)

查看您的查询后,我就看到了这一点:

您希望满足以下条件之一:

  • 赛季= 0,夏季赛季
  • 季节= 1和夏季
  • 赛季= 0,冬季赛季
  • 赛季= 2,冬季赛季。

这可以缩短为两个选项:

  • 季节!= 2和夏季
  • 季节!= 1和冬季

所以,这就是我写这个查询的方式:

SELECT id
FROM Childrens
WHERE id_parent = 2656
    AND ( ((season != 1) AND (Now() >= winter_from) AND (Now() <= winter_till))
       OR ((season != 2) AND (Now() >= summer_from) AND (Now() <= summer_till)) )