【问题标题】:Select date interval inside WHERE clause在 WHERE 子句中选择日期间隔
【发布时间】:2017-05-07 02:04:20
【问题描述】:

我正在尝试查询过去 36 个月内已开立的贷款列表。我还尝试将过去 12 个月内已开立的贷款计数作为单独的列进行查询。

查询为两列返回相同的值,如何在不运行单独查询的情况下获取 36 个月和 12 个月间隔的计数?

SELECT 
`XDL-NAME`, 
COUNT(distinct`XLN-LOANDATE`) as '36 Month Count',
COUNT(IF(`XLN-LOANDATE` >= DATE_SUB(NOW(),INTERVAL 12 MONTH), 1 , NULL)) AS '12 Month Count' 
 from
 LOAN
 JOIN
 DEALER ON `XLN-DLNO` = `XDL-NUM` WHERE `XLN-LOANDATE` >= DATE_SUB(NOW(),INTERVAL 36 MONTH)

 GROUP BY `XDL-NAME`

【问题讨论】:

  • 请编辑您的问题并提供示例数据和所需结果。例如,为什么你有一个count(distinct)?如果您要计算贷款,为什么还要计算日期?

标签: mysql sql date group-by where


【解决方案1】:

12 monthscount 改为 sum,如下所示

SELECT 
`XDL-NAME`, 
COUNT(distinct`XLN-LOANDATE`) as '36 Month Count',
SUM(IF(`XLN-LOANDATE` >= DATE_SUB(NOW(),INTERVAL 12 MONTH), 1 , 0)) AS '12 Month Count' 
 from
 LOAN
 JOIN
 DEALER ON `XLN-DLNO` = `XDL-NUM` WHERE `XLN-LOANDATE` >= DATE_SUB(NOW(),INTERVAL 36 MONTH)

 GROUP BY `XDL-NAME`

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT 
        `XDL-NAME`, 
        count((SELECT `XLN-LOANDATE` WHERE `XLN-LOANDATE` >= DATE_SUB(NOW(),INTERVAL 36 MONTH))) AS '36 Month Count',
        count((SELECT `XLN-LOANDATE` WHERE `XLN-LOANDATE` >= DATE_SUB(NOW(),INTERVAL 12 MONTH))) AS '12 Month Count',
    from
        LOAN
            JOIN
                DEALER ON `XLN-DLNO` = `XDL-NUM` 
    GROUP BY `XDL-NAME`
    

    我所做的是使用子查询来计算您想要的每个间隔。这样他们应该在一行(记录)上输出名称、36 个月计数、12 个月计数。

    【讨论】:

      【解决方案3】:

      我希望这个查询返回两个单独的计数:

      SELECT `XDL-NAME`, 
              COUNT(*) as `36 Month Count`,
              SUM(`XLN-LOANDATE` >= DATE_SUB(NOW(), INTERVAL 12 MONTH)) AS `12 Month Count`
      FROM loan l join
           dealer d
           ON `XLN-DLNO` = `XDL-NUM`
      WHERE `XLN-LOANDATE` >= DATE_SUB(NOW(), INTERVAL 36 MONTH)
      GROUP BY `XDL-NAME`;
      

      【讨论】:

        【解决方案4】:

        试试 SUM 喜欢:

        SUM(IF('2016-12-21' >= NOW() -INTERVAL 12 MONTH, 1, 0)) AS '12 Month Count' 
        

        示例

        mysql> SELECT IF('2016-12-21' >= NOW() -INTERVAL 12 MONTH, 1, 0);
        +----------------------------------------------------+
        | IF('2016-12-21' >= NOW() -INTERVAL 12 MONTH, 1, 0) |
        +----------------------------------------------------+
        |                                                  1 |
        +----------------------------------------------------+
        1 row in set (0,00 sec)
        
        mysql> SELECT IF('2015-12-22' >= NOW() -INTERVAL 12 MONTH, 1, 0);
        +----------------------------------------------------+
        | IF('2015-12-22' >= NOW() -INTERVAL 12 MONTH, 1, 0) |
        +----------------------------------------------------+
        |                                                  1 |
        +----------------------------------------------------+
        1 row in set (0,00 sec)
        
        mysql> SELECT IF('2015-12-21' >= NOW() -INTERVAL 12 MONTH, 1, 0);
        +----------------------------------------------------+
        | IF('2015-12-21' >= NOW() -INTERVAL 12 MONTH, 1, 0) |
        +----------------------------------------------------+
        |                                                  0 |
        +----------------------------------------------------+
        1 row in set (0,00 sec)
        
        mysql>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-09-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-29
          • 2012-03-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多