mysql недостающие даты и счетчик

У меня есть таблица, которая сохраняет дату и час от доступов к веб сайту.

таблица сохраняет дату в формате 000-00-00 0:00:00 и я форматирую ее с

DATE_FORMAT(ultimo_login,'%Y/%m/%d')

совсем правильный до сих пор

SELECT
COUNT(DATE_FORMAT(ultimo_login,'%Y/%m/%d')) AS contador
, DATE_FORMAT(ultimo_login,'%Y/%m/%d') AS concepto
FROM userslogins
GROUP BY concepto;

Случай состоит в том, что мне не хватает дат между одними и другими, и сколько бы я это не пробую мне не удается наполнить их.

консультация оказывается такой

introducir la descripción de la imagen aquí

и он должен бы быть

introducir la descripción de la imagen aquí

Кто-то мог бы помогать мне с этим? Тысячи спасибо

ЗАМЕТЬ: даты, которых нет,, - из-за которого совсем не работал этот день, не из-за которого он бьет козырем вводить их в компьютер...

1
задан 27.12.2019, 23:33
1 ответ

То, что deberГ-схвати делания, состоит в том, чтобы производить временную таблицу с рангом дат, что ты нуждаешься в

, это хранившийся процесс, который ты можешь выполнять, чтобы создавать временную таблицу с реестрами, с этим ты мог бы делать subquery в таблицу userslogins


# generar la tabla temporal entre el rango deseado
call make_intervals(
  (SELECT MIN(ultimo_login) FROM userslogins),
  (SELECT MAX(ultimo_login) FROM userslogins),
  1,
  'DAY'
);

# consulta deseada
select 
  (SELECT COUNT(*) FROM userslogins WHERE DATE(ultimo_login) = DATE(interval_start)) AS contador, 
  DATE_FORMAT(interval_start,'%Y/%m/%d') AS concepto
from time_intervals;
DELIMITER $

USE `database`$

DROP PROCEDURE IF EXISTS `make_intervals`$

CREATE DEFINER=`root`@`localhost` PROCEDURE `make_intervals`(startdate timestamp, enddate timestamp, intval integer, unitval varchar(10))
deterministic
BEGIN
        declare thisDate timestamp;
       declare nextDate timestamp;
       set thisDate = startdate;
       -- *************************************************************************
       -- Drop / create the temp table
       -- *************************************************************************
       drop temporary table if exists time_intervals;
       create temporary table if not exists time_intervals
          (
          interval_start timestamp,
          interval_end timestamp
          );
       -- *************************************************************************
       -- Loop through the startdate adding each intval interval until enddate
       -- *************************************************************************
        repeat
            select
                case unitval
                    when 'MICROSECOND' then timestampadd(MICROSECOND, intval, thisDate)
                    when 'SECOND'      then timestampadd(SECOND, intval, thisDate)
                    when 'MINUTE'      then timestampadd(MINUTE, intval, thisDate)
                    when 'HOUR'        then timestampadd(HOUR, intval, thisDate)
                when 'DAY'         then timestampadd(DAY, intval, thisDate)
                when 'WEEK'        then timestampadd(WEEK, intval, thisDate)
                when 'MONTH'       then timestampadd(MONTH, intval, thisDate)
                when 'QUARTER'     then timestampadd(QUARTER, intval, thisDate)
                when 'YEAR'        then timestampadd(YEAR, intval, thisDate)
            end into nextDate;
            insert into time_intervals select thisDate, timestampadd(MICROSECOND, -1, nextDate);
            set thisDate = nextDate;
            until thisDate >= enddate
       end repeat;
    END$

DELIMITER ;
1
ответ дан 29.12.2019, 09:10