【问题标题】:how to check if the three dates in a table column has continuous months如何检查表列中的三个日期是否连续月份
【发布时间】:2014-01-31 06:50:36
【问题描述】:

我有一个表,其列名 date_tran 显示用户进行任何交易的日期。有什么办法可以检查用户进行的 3 笔交易是在同一个月还是连续 3 个月?

我正在使用以下 sn-p:

SELECT CUST_ID,  DATE_TRAN FROM  FAKE_CUST F WHERE 
          EXISTS( 
                SELECT 1 from FAKE_CUST where (TO_CHAR(DATE_TRAN,'MM') = TO_CHAR(F.DATE_TRAN,'MM')-1 OR TO_CHAR(DATE_TRAN,'MM') = TO_CHAR(F.DATE_TRAN,'MM')) AND 
                                        CUST_ID= F.CUST_ID  AND TO_CHAR(DATE_TRAN,'YYYY')=TO_CHAR(F.DATE_TRAN,'YYYY'))
      and exists(
                SELECT 1 from FAKE_CUST where (TO_CHAR(DATE_TRAN,'MM') = TO_CHAR(F.DATE_TRAN,'MM')-2 OR TO_CHAR(DATE_TRAN,'MM') = TO_CHAR(F.DATE_TRAN,'MM')) AND 
                                        CUST_ID= F.CUST_ID AND TO_CHAR(DATE_TRAN,'YYYY')=TO_CHAR(F.DATE_TRAN,'YYYY'))

但显示的是表中的所有条目,而不是所需的结果。

【问题讨论】:

    标签: select oracle11g to-char


    【解决方案1】:
    1. 用户在同一个月内完成了 3 笔交易

      类似... 按 getmonth(DATE_TRN) 分组, count(getmonth(DATE_TRN)) >= 3

    MySql:

    SELECT CUST_ID, DATE_TRAN FROM XXX where cust_id in (SELECT cust_id from XXX Group By DATE_FORMAT(DATE_TRAN, '%m') 有 count(DATE_FORMAT(DATE_TRAN, '%m')) > 2)

    1. 用户在 3 个缺点月内完成了 3 笔交易

      按 getmonth(DATE_TRN) 分组,count(getmonth(DATE_TRN)) > 1, count(getmonth(DATE_TRN)-1) > 1, count(getmonth(DATE_TRN)-2) > 1

    【讨论】:

    • 我正在用 oracle 编写查询。我将您的查询修改为,但这不起作用
    • SELECT CUST_ID, DATE_TRAN FROM fake_cust where cust_id in (SELECT cust_id from fake_cust Group By EXTRACT(MONTH FROM DATE_TRAN) 有 (count(EXTRACT(MONTH FROM DATE_TRAN)) > 1 AND count(EXTRACT(MONTH FROM DATE_TRAN)-1) > 1 AND count(EXTRACT(MONTH FROM DATE_TRAN)-2) > 1 ))
    猜你喜欢
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 2014-01-20
    相关资源
    最近更新 更多