【问题标题】:SQL QUERY to display List of User who does not have any kind of transactions since last 6 monthsSQL QUERY 显示自过去 6 个月以来没有任何类型交易的用户列表
【发布时间】:2023-03-09 20:25:02
【问题描述】:

请帮我获取自过去 6 个月以来没有任何交易的用户列表

我尝试使用以下查询,仍然显示具有当前交易的 ID 列表,但我想要过去 6 个月不活动的此客户的详细信息,即。自过去 6 个月以来没有交易

select AST_ID,
AST_VALUE_DATE,
max(distinct(AST_VALUE_DATE)) from account_statement 

having max(AST_VALUE_DATE)<='30-09-2020'   
group by AST_ID,
AST_VALUE_DATE
order by AST_VALUE_DATE desc;

谁能帮忙看看我哪里出错了?

【问题讨论】:

  • 包含您的表结构(以便我们可以查看数据类型)、样本数据和该数据的预期结果以及您在查询中获得的不正确结果及其原因会很有帮助错了。

标签: sql oracle10g


【解决方案1】:

我想你只是想要:

select AST_ID, max(LAST_VALUE_DATE) as LAST_VALUE_DATE
from account_statement 
group by AST_ID
having max(LAST_VALUE_DATE) <= DATE '2020-09-30'
order by LAST_VALUE_DATE desc;

【讨论】:

  • 感谢您的帮助,但是通过上面提到的查询,我仍然得到那些在“2020-09-30”之后发生交易的客户数据,我只是想要一个最后交易必须的客户列表小于或等于 2020-09-30
  • @ArvikS - 我不明白...除非AST_VALUE_DATE 是一个字符串,而不是一个真实的日期?
【解决方案2】:

您正在按 ID 和日期分组;每行的max(AST_VALUE_DATE) 总是与AST_VALUE_DATE 相同。 (不同的是没有添加任何东西)。

您还与字符串进行比较,而不是日期;这依赖于隐式转换。

从选择列表和分组中删除多余的AST_VALUE_DATE,并与适当的日期进行比较,或者作为文字:

select AST_ID, max(AST_VALUE_DATE) as AST_VALUE_DATE
from account_statement 
group by AST_ID
having max(AST_VALUE_DATE) < date '2020-09-30'
order by AST_VALUE_DATE desc;

或者从今天开始回顾六个月:

having max(AST_VALUE_DATE) < add_months(trunc(sysdate), -6)

或从当月开始回溯六个月:

having max(AST_VALUE_DATE) < add_months(trunc(sysdate, 'MM'), -6)

根据您当前的字符串值,我想这是您想要的。

db<>fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2016-10-22
    • 1970-01-01
    • 2013-09-16
    • 2020-12-21
    • 2019-04-09
    相关资源
    最近更新 更多