2016-12-21 7 views
0

Я пытаюсь запросить список кредитов, которые были открыты в течение последних 36 месяцев. Я также пытаюсь запросить количество кредитов, которые были открыты в течение последних 12 месяцев в виде отдельной колонки.Выберите интервал даты внутри предложения WHERE

Запрос возвращает одинаковые значения для обоих столбцов, как я могу получить счет с интервалов 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` 
+0

Пожалуйста, измените свой вопрос и предоставить образцы данных и Результаты. Например, почему у вас есть 'count (distinct)'? И почему вы рассчитываете дату, если вы ищете количество кредитов? –

ответ

0

Вместо count для 12 months, чтобы изменить 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` 
0

Попробуйте это:

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-месячным счетом всего на одну строку (запись).

0

Я ожидал бы этот запрос, чтобы вернуть две отдельные счетчики:

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`; 
0

Попробуйте SUM как:

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

Sample

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>