Мне интересно, можно ли сделать такой запрос:

SELECT COUNT(DISTINCT `User`) FROM `test_table` WHERE `createdDate` >= now() - INTERVAL 1 DAY AS Day
&&
SELECT COUNT(DISTINCT `User`) FROM `test_table` WHERE `createdDate` >= now() - INTERVAL 7 DAY AS Week
&&
SELECT COUNT(DISTINCT `User`) FROM `test_table` WHERE `createdDate` >= now() - INTERVAL 30 DAY AS Month

В идеале запрос должен возвращать количество пользователей, созданных за последний месяц / неделю / день.

1
user4200570 27 Фев 2016 в 20:07

2 ответа

Лучший ответ
SELECT 
IFNULL(SUM(CASE WHEN `createdDate` >= CURDATE() - INTERVAL 1 DAY THEN 1 ELSE 0 END),'0') AS 'LastDay',
IFNULL(SUM(CASE WHEN `createdDate` >= CURDATE() - INTERVAL 7 DAY THEN 1 ELSE 0 END),'0') AS 'LastSevenDays',
IFNULL(SUM(CASE WHEN `createdDate` >= CURDATE() - INTERVAL 30 DAY THEN 1 ELSE 0 END),'0') AS 'LastThirtyDays'
FROM 
test_table
WHERE `createdDate` >= CURDATE() - INTERVAL 30 DAY;
0
1000111 27 Фев 2016 в 17:26

Просто используйте DATE_SUB (NOW (), INTERVAL 1 DAY)

SELECT COUNT(DISTINCT `User`) as dailyUser FROM `test_table` WHERE `createdDate` >= DATE_SUB(NOW(), INTERVAL 1 DAY)

SELECT COUNT(DISTINCT `User`) as weeklyUser FROM `test_table` WHERE `createdDate` >= DATE_SUB(NOW(), INTERVAL 1 WEEK)

SELECT COUNT(DISTINCT `User`) as monthlyUser FROM `test_table` WHERE `createdDate` >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
0
Kordi 27 Фев 2016 в 17:19