开发者社区> 问答> 正文

级别15,状态1,行136在需要条件的上下文中指定的非布尔类型表达式,在')'附近

SELECT 
    c.customer_Id, SUM(total_amt), DATEDIFF(YEAR, DOB, GETDATE()) as DOB
FROM 
    Transactions T
INNER JOIN 
    Customer C ON T.cust_id = C.customer_Id
GROUP BY
    c.customer_Id, DATEDIFF(YEAR, DOB, GETDATE())
HAVING
    (DATEDIFF(YEAR, DOB, GETDATE()) BETWEEN 25 AND 35)
    AND (SELECT tran_date
         FROM Transactions
         HAVING tran_date BETWEEN DATEADD (DAY , -30, MAX(tran_date)) AND MAX(tran_date))

执行以上代码时出现此错误:

消息4145,级别15,状态1,第136行在 ')'附近的期望条件下指定的非布尔类型表达式

展开
收起
祖安文状元 2020-01-04 16:01:00 441 0
1 条回答
写回答
取消 提交回答
  • 如果要汇总每个客户的25岁至35岁之间的每个客户最近30天的交易记录,那么您基本上想在汇总之前进行过滤:

    SELECT c.customer_Id, SUM(total_amt), DATEDIFF(YEAR, DOB, GETDATE()) as DOB
    FROM Customer C JOIN
         (SELECT T.*,
                 MAX(tran_date) OVER (PARTITION BY cust_id) as max_tran_date
          FROM Transactions T
         ) T
         ON T.cust_id = C.customer_Id
    WHERE DOB >= DATEADD(YEAR, -35, GETDATE()) AND
          DOB < DATEADD(YEAR, -24, GETDATE()) AND
          t.tran_date >= DATEADD(DAY, -30, max_tran_date)
    GROUP BY c.customer_Id, DATEDIFF(YEAR, DOB, GETDATE());
    
    2020-01-04 16:01:10
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多