Как выбрать всю неделю с понедельника по воскресенье в MySQL? - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь выбрать даты для моего запроса, но я также хочу получить, например, воскресенье, даже не воскресенье в день моего sql.Воскресенье - ноль.

здесь mysql

SELECT
    DATE(log_date) DATE,
    COUNT(users) active_users,
    DATE_FORMAT(log_date,'%a') DAYNAME
FROM tbl_accounts
WHERE
    DATE(log_date) BETWEEN DATE(:now) - INTERVAL 1 WEEK AND DATE(:now)
GROUP BY DATE(log_date);

Что я должен сделать, это выбрать с понедельника по воскресенье, даже если воскресенья нет, я все еще хочу выбрать moday, и он покажет нулевое значение, если оно пустое?возможно ли это?

Пример вывода: enter image description here

Я хочу, чтобы этот вывод стал понедельником-воскресеньем, а затем воскресенье покажет ноль, если воскресенья нет.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018
SELECT
    DATE(log_date) DATE,
    COUNT(users) active_users,
    DATE_FORMAT(log_date,'%a') DAYNAME
FROM tbl_accounts
WHERE
    DATE(log_date) BETWEEN DATE(:now) - INTERVAL 1 WEEK AND DATE(:now)and
DATENAME(dw , @date) <> 'Monday'
GROUP BY DATE(log_date);

Просто исключите его, добавив туда, где находится clouse.DATENAME(dw , @date) <> 'Monday' Это встроенная функция MSSQL.

0 голосов
/ 12 июня 2018

Вы имели в виду, как это?

SELECT  t.DATE, IFNULL(t.active_users, 0) AS active_users, week.d 
FROM (
SELECT DATE(log_date) DATE,
    COUNT(users) active_users,
    DATE_FORMAT(log_date,'%a') DAYNAME
FROM tbl_accounts
WHERE DATE(log_date) BETWEEN DATE(NOW()) - INTERVAL 1 WEEK AND DATE(NOW())
GROUP BY DATE(log_date)) AS t
RIGHT OUTER JOIN (
    SELECT 'Sun' AS d
    UNION SELECT 'Mon' AS d
    UNION SELECT 'Tue' AS d
    UNION SELECT 'Wed' AS d
    UNION SELECT 'Thu' AS d
    UNION SELECT 'Fri' AS d
    UNION SELECT 'Sat' AS d
) AS week ON week.d = t.DAYNAME

Пример результата в MySQL выглядит следующим образом:

Example in MySQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...