首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >日期范围上的SQL连接事务

日期范围上的SQL连接事务
EN

Stack Overflow用户
提问于 2021-10-19 18:27:34
回答 1查看 55关注 0票数 0

在Server 2014中,我使用两个表,一个是EMPLOYEE表,另一个是SALES表:

代码语言:javascript
运行
复制
EMPID EMPNAME    HIRE_DATE
---------------------------
1234  JOHN SMITH 2021-05-01
1235  JANE DOE   2021-08-05
1236  JANE SMITH 2021-07-31

EMPID SALE_DATE  PRODUCT
-------------------------------------
1234  2021-05-05 VPN
1234  2021-05-10 VPN Basic
1234  2021-07-15 Cloud Storage Bronze
1234  2021-07-05 Cloud Storage Gold
1235  2021-10-01 Antivirus

我需要编写一个查询,该查询将从EMPLOYEE表生成所有行/列,其中的列显示其(聚合的)销售,但只有在雇用日期后30天内触发的销售。

此查询工作正常,但将使所有已完成的销售工作到目前为止:

代码语言:javascript
运行
复制
SELECT EMP.*, SALES_30_DAYS
FROM EMP 
LEFT JOIN 
    (SELECT EMPID, COUNT(*) 
     FROM SALES_30_DAYS 
     GROUP BY EMPID) ON EMP.EMPID = SALES.EMPID 

在另一次尝试中,子查询中无法识别HIRE_DATE

代码语言:javascript
运行
复制
SELECT EMP.*, SALES_30_DAYS 
FROM EMP 
LEFT JOIN 
    (SELECT EMPID, COUNT(*) SALES_30_DAYS 
     FROM SALES 
     WHERE DATEDIFF(DD, HIRE_DATE, SALE_DATE) < 30 
     GROUP BY EMPID) ON EMP.EMPID=  SALES.EMPID 

如何重写此查询,以便第二个表只在销售在雇用日期后30天内提供汇总销售?

预期结果:

代码语言:javascript
运行
复制
EMPID EMPNAME    HIRE_DATE  SALES_30_DAYS
-----------------------------------------
1234  JOHN SMITH 2021-05-01 2
1235  JANE DOE   2021-08-05 1
1236  JANE SMITH 2021-07-31 NULL
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-19 18:37:13

代码语言:javascript
运行
复制
WITH EMPLOYEES(EMPID, EMPNAME, HIRE_DATE)AS
(
   SELECT 1234,  'JOHN SMITH', '2021-05-01' UNION ALL
   SELECT 1235,  'JANE DOE'  , '2021-08-05' UNION ALL
   SELECT 1236,  'JANE SMITH' ,'2021-07-31'  

),
SALES(EMPID, SALE_DATE,  PRODUCT) AS
(

 SELECT 1234,  '2021-05-05' ,'VPN' UNION ALL
 SELECT 1234 , '2021-05-10' ,'VPN Basic' UNION ALL
 SELECT 1234 , '2021-07-15' ,'Cloud Storage Bronze' UNION ALL
 SELECT 1234 , '2021-07-05' ,'Cloud Storage Gold' UNION ALL
 SELECT 1235 , '2021-10-01', 'Antivirus' 
)
SELECT E.EMPID,E.EMPNAME,E.HIRE_DATE,SALE_QUERY.CNTT
FROM EMPLOYEES E
OUTER APPLY
(
  SELECT COUNT(*)CNTT
    FROM SALES AS S WHERE E.EMPID=S.EMPID AND
      S.SALE_DATE BETWEEN E.HIRE_DATE AND DATEADD(DD,30,E.HIRE_DATE)
)SALE_QUERY

请您试一下以上是否适合您。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69635998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档