gbqsql:在where语句中使用if语句过滤数据

mec1mxoz  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(310)

在满足多个条件时查找筛选数据。我的表格如下:

ID   STOCK   TIME (datetime field)
1    0       2020-06-12T09:20:00.000
2    0       2020-06-11T09:20:00.000
3    10      2020-06-10T09:20:00.000
4    5       2019-01-12T09:20:00.000
5    0       2009-01-12T09:20:00.000
6    0       2009-06-12T09:20:00.000

我需要保留满足以下任一条件的行:
如果库存>0,则保留行
如果库存<=0,并且时间是从今天开始的2周内,则保留行
结果表应如下所示:

ID   STOCK   TIME (datetime field)
1    0       2020-06-12T09:20:00.000
2    0       2020-06-11T09:20:00.000
3    10      2020-06-10T09:20:00.000
4    5       2019-01-12T09:20:00.000

对于代码中的where语句,我可以执行标准的第一部分,但却被第二部分卡住了。

WHERE STOCK > 0 OR STOCK <=0 AND TIME BETWEEN datetime_add(current_datetime(), interval -14 day) and current_datetime()

不确定上述代码是否正确。尤其是在手术室。。。

ssgvzors

ssgvzors1#

您的表达式是正确的,同时建议在这种情况下使用括号以避免混淆,如下面的示例所示

WHERE STOCK > 0 OR (STOCK <=0 AND TIME BETWEEN datetime_add(current_datetime(), interval -14 day) and current_datetime())
mkshixfv

mkshixfv2#

你的代码看起来基本正确。但可以简化为:

WHERE STOCK > 0 OR 
      TIME >= DATETIME_ADD(CURRENT_DATETIME(), interval -14 day)

这有两个假设: stock 不是 NULL . time 不是将来。
这两者似乎都是合理的。

相关问题