Задать вопрос
Ответы пользователя по тегу MySQL
  • Как пронумеровать строки?

    @Noxy
    увлекаюсь SQL
    Примерно так:
    -- селект номеров строчек в разрезе дискусий. аналог ms sql row_number over ( partition by ...
    
        SELECT 
               @row_number:=CASE WHEN @discussion_id=discussion_id THEN @row_number+1 ELSE 1 END AS ROW_NUMBER
               ,@discussion_id:=discussion_id AS discussion_id
               ,message_id
        FROM posts, (SELECT @row_number:=0,@discussion_id:=0) AS t
        ORDER BY discussion_id
    
       -- http://www.mysqltutorial.org/mysql-update-join/ 
       UPDATE posts p 
       JOIN (
           SELECT 
           @row_number:=CASE WHEN @discussion_id=discussion_id THEN @row_number+1 ELSE 1 END AS row_number
           ,@discussion_id:=discussion_id AS discussion_id
           ,message_id
           FROM posts, (SELECT @row_number:=0,@discussion_id:=0) AS t
       ) r  
       ON r.discussion_id = p.discussion_id AND r.message_id = p.message_id
       SET p.number = r.row_number


    проверить не могу(
    Ответ написан
    Комментировать
  • Как заменить значения объединенных таблиц sql?

    @Noxy
    увлекаюсь SQL
    Ответ написан
    Комментировать
  • Как убрать глюк расчета порядкового номерома в MYSQL таблице?

    @Noxy
    увлекаюсь SQL
    Добрый день,
    а какие значение в поле companies.mng_status по которому идет сортировка?

    предположим что в top 5000 всегда возвращается первые вычитанные данные по индексу со значением mng_status = 1.

    в случае когда мы запрашиваем все данные или 15000 скуль решает взять не из индекса, а просканить таблу.

    тогда со статусом mng_status = 1 будет много больше данных и конкретный id в ней не обязательно будет в том же месте где был при вычитки из индексе, сортировка в самом индексе может быть другой.

    можно попробовать добавить хинт на использование индекса и посмотреть что получится: USE INDEX (col_index)
    Ответ написан
    Комментировать
  • По какому полю сделать группировку?

    @Noxy
    увлекаюсь SQL
    Просто на подумать:
    Основная проблема в том, что ночная смена начинается одним днем, заканчивается другим.
    Поэтому надо проанализировать время и если больше 22 часов - то это ночная смена + рабочий день = следующий, т.е. добавить день. Или наоборот если < 10 утра, то это ночная предыдущего - то -1 день.

    анализируем данные, добавляя (или убирая день для ночных) - получаем рабочий день, + признак day или night

    группируем уже по полученному рабочему дню, смене, кассиру.

    SELECT S.workday, S.smena, S.userid, COUNT(*) 
    FROM (
        SELECT t.dtime, t.userid, 
            CONVERT( CASE WHEN HOUR(t.dtime) >= 22 THEN DATE_ADD(t.dtime,INTERVAL 1 DAY) ELSE t.dtime END, DATE) as 'workday', 
            CASE WHEN HOUR(t.dtime) >= 10 AND HOUR(t.dtime) < 22 THEN 'day' ELSE 'night' END as 'smena'
        FROM test AS t
        ) S
    GROUP BY workday, smena, userid
    ORDER BY S.workday ASC, S.smena DESC, S.userid

    пример тут: sqlfiddle.com/#!9/7bd4f/4/0

    НО. есть одно большое НО.
    Кассиры начинают или заканчивают работы не ровно в 10 утра или 22 вечера.
    В вашем же примере
    10.10.2015 9:51; 514; 3000
    по идее он попадает в ночную смену по интервалу времени, а в реальности работник начал работать раньше.

    Либо вводить признак день\ночь и уже не опираться на время либо придумывать велосипед.
    Ответ написан
    Комментировать
  • Как выбрать с результирующей таблицы?

    @Noxy
    увлекаюсь SQL
    Может просто ошибок не получаете?.

    не знаю как в MySQL, но в MS SQL в данном случае order by надо вынести или использовать TOP внутри.

    попробуйте вынести сортировку.
    order by result_table.`date_created` desc, result_table.`comments_id`
    Ответ написан
    Комментировать
  • Как подсчитать кол-во уникальных записей?

    @Noxy
    увлекаюсь SQL
    не совсем понятна задача, но

    SELECT t.cid, t.date_time, t2.cnt   
    FROM example t
    LEFT JOIN 
         (SELECT cid, COUNT(id) as cnt FROM example GROUP BY cid)  t2 ON  (t2.cid = t.cid)
    WHERE date_time > '2015-10-01 00:00:00'
    -- and t2.cnt = 1   -- только уникальные
    Ответ написан
    2 комментария