Как исключить дату из условия с подсчетом? - PullRequest
1 голос
/ 06 мая 2019

Я пишу запрос для подсчета переменной, где дата находится между 201801 и 201812, и я хочу исключить переменную с датой 201806. Как мне этого добиться?

Это то, что я сделал до сих пор:

SELECT COUNT (Var1) as 'varCount' 
from Vartable 
inner join UserTable on usr_id 
where usr_login = 'bella' 
  and Var_Date between 201801 and 201812 

Ответы [ 4 ]

1 голос
/ 06 мая 2019

Если ваша дата хранится как дата, то сравнения должны быть также датами. Я бы предложил:

select count(Var1) as varCount 
from Vartable inner join
     UserTable
     on usr_id 
where usr_login = 'bella' and
      (var_date >= '20180101' and var_date < '20180601' or
       var_date >= '20180701' and var_date < '20190101'
      )

Если столбец, который вы называете var_date, на самом деле является целым числом, представляющим месяц, то я бы рекомендовал переименовать его. И тогда вы можете просто сделать:

where usr_login = 'bella' and
      yyyymm >= 201801 and
      yyyymm <= 201812 and
      yyyymm <> 201806
1 голос
/ 06 мая 2019

Добавьте Var_Date not in (201806) с вашим условием where

SELECT COUNT (Var1) as 'varCount' 
from Vartable inner join UserTable on usr_id 
where usr_login = 'bella' 
  and Var_Date between 201801 and 201812 
  and Var_Date not in (201806)
0 голосов
/ 06 мая 2019
SELECT COUNT(Var1) as 'varCount' 
from Vartable 
inner join UserTable on usr_id 
where usr_login = 'bella' 
  and Var_Date between '201801' and '201812'
  and Var_Date <> '201806'
0 голосов
/ 06 мая 2019

Просто исключите 201806 в предложении WHERE как

WITH CTE AS
(
  SELECT 201801 Var_Date 
  UNION
  SELECT 201802
  UNION
  SELECT 201803
  UNION
  SELECT 201804
  UNION
  SELECT 201805
  UNION
  SELECT 201806
  UNION
  SELECT 201807
  UNION
  SELECT 201808
  UNION
  SELECT 201809
  UNION
  SELECT 201810
  UNION
  SELECT 201811
  UNION
  SELECT 201812
  UNION
  SELECT 201901
  UNION
  SELECT 201902
)

SELECT COUNT(1) Cnt
FROM CTE
WHERE Var_Date BETWEEN 201801 AND 201812
      AND Var_Date != 201806;

Если столбец DATE, то вы можете сделать как

SELECT COUNT(Var1) VarCount
FROM VarTable V INNER JOIN UserTable U
ON V.UserId = U.UserId --Don't forget the JOIN conditions
WHERE U.Usr_Login = 'bella'
      AND
      Var_Date BETWEEN '2018-01-01' AND '2018-12-31'
      AND
      Var_Date NOT BETWEEN '2018-06-01' AND '2018-06-30'

Вы также можете использовать MONTH() и YEAR() как

SELECT COUNT(Var1) VarCount
FROM VarTable V INNER JOIN UserTable U
ON V.UserId = U.UserId --Don't forget the JOIN conditions
WHERE U.Usr_Login = 'bella'
      AND
      MONTH(Var_Date) <> 6
      AND
      YEAR(Var_Date) = 2018;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...