Sql 查询以查找具有指定月份的帐户

Sql 查询以查找具有指定月份的帐户,sql,Sql,我想提取那些存在于5月和6月但不存在于7月的帐户ID。我有6个月的数据 我已尝试使用条件(和/或不) 选择帐户ID、数据\u月 从数据1 其中数据月份为2018年5月1日,数据月份为2018年7月1日 每月按数据分组 我仍在获取帐户ID,在7月份,您的日期格式看起来像Oracle,因此我将为该数据库负责 其思想是使用条件聚合: SELECT ACCOUNT_ID, DATA_MONTH FROM DATA1 WHERE DATA_MONTH >= DATE '2018-05-01' AN

我想提取那些存在于5月和6月但不存在于7月的帐户ID。我有6个月的数据

我已尝试使用条件(和/或不)

选择帐户ID、数据\u月
从数据1
其中数据月份为2018年5月1日,数据月份为2018年7月1日
每月按数据分组

我仍在获取帐户ID,在7月份,您的日期格式看起来像Oracle,因此我将为该数据库负责

其思想是使用条件聚合:

SELECT ACCOUNT_ID, DATA_MONTH
FROM DATA1
WHERE DATA_MONTH >= DATE '2018-05-01' AND
      DATA_MONTH < DATE '2018-08-01'
GROUP BY ACCOUNT_ID
HAVING COUNT(DISTINCT DATA_MONTH) = 2 AND
       MAX(DATA_MONTH) < DATE '2018-07-01';
选择帐户ID、数据\u月
从数据1
其中数据月>=日期“2018-05-01”和
数据月份<日期'2018-08-01'
按帐户\u ID分组
具有计数(不同数据_月)=2和
最大值(数据月)<日期'2018-07-01';

这假设您的所有日期都在每月的第一天。

使用SQL Server的月份函数可以为您提供一个可以理解的示例,说明如何解决此问题

SELECT ACCOUNT_ID
FROM DATA1
WHERE MONTH(DATA_MONTH) in (5,6) AND YEAR(DATA_MONTH) = 2018 AND MONTH(DATA_MONTH) NOT IN (7) 
GROUP BY ACCOUNT_ID

您可以在
HAVING
子句中输入所需的条件:

SELECT ACCOUNT_ID
FROM DATA1
GROUP BY ACCOUNT_ID
HAVING
  SUM(CASE WHEN MONTH(DATA_MONTH) = 5 THEN 1 ELSE 0 END) > 0
  AND
  SUM(CASE WHEN MONTH(DATA_MONTH) = 6 THEN 1 ELSE 0 END) > 0
  AND
  SUM(CASE WHEN MONTH(DATA_MONTH) = 7 THEN 1 ELSE 0 END) = 0
我假设在rdbms中存在一个类似于
MONTH()
的函数来从日期中提取月份
如果您还想检查年份,您可以在每种情况下进行检查,因此您必须更改为:

CASE WHEN MONTH(DATA_MONTH) = 7 AND YEAR(DATA_MONTH) = 2018 THEN 1 ELSE 0

您使用的是哪种数据库管理系统?(当涉及到日期/时间时,许多产品远远不符合ANSI SQL。)列数据\月数据类型?您是指五月和六月,还是仅仅其中一种就可以了?向我们展示一些示例表数据和预期结果-全部为格式化文本,没有图像。在开始之前先看一看。是的,我想要5月和6月,但不是7月。请注意,输入所有大写字母被认为是粗鲁的,被视为大喊大叫。似乎你错过了“但不是在7月”部分。
CASE WHEN MONTH(DATA_MONTH) = 7 AND YEAR(DATA_MONTH) = 2018 THEN 1 ELSE 0
SELECT ACCOUNT_ID, DATA_MONTH
FROM DATA1
WHERE MONTH(DATA_MONTH) =5 AND MONTH(DATA_MONTH) = 6
GROUP BY DATA_MONTH
SELECT ACCOUNT_ID, DATA_MONTH
FROM DATA1
WHERE MONTH(DATA_MONTH)  BETWEEN 5  AND  6
GROUP BY Year(DATA_MONTH),month(DATA_MONTH)