Запрос на выборку из бд с одной таблицы

Wolf56732

Новичок
Всем привет
У меня есть таблица SQL называется к примеру video в ней лежат данные count (просмотры), like(лайки), dat (день) там формат 52 день и тд 53 и тд

мне нужно выбрать id cамых популярных видео за сутки у которых самый большой прирост по просмотрам, как я это делаю( но у меня не вышло) достаю данные за 51 и 52 день и вычитаю колличество просмотров, и получается я достаю видео у которых самый большой прирост за сутки по просмотрам
мой запрос выглядит так
SELECT A.id, A.count - B.count FROM `video` A left JOIN `video ` B ON A.`dat `= "52" and B.`dat ` = "53." WHERE A.id = B.id and A.count is NOT NULL and B.count is NOT NULL ORDER BY 2 DESC LIMIT 10
но почему то он возвращает пустоту, что я не правильно пишу в это запросе, не могли бы вы указать на ошибки
 

antonio

Moderator
Команда форума
А если сделать два запроса для dat = 52 и 53, то данные в обоих результатах будут?
открой для себя union и подчиненные запросы или же пиши хранилку.
 

Wolf56732

Новичок
А если сделать два запроса для dat = 52 и 53, то данные в обоих результатах будут?
открой для себя union и подчиненные запросы или же пиши хранилку.
я пробовал такой запрос SELECT A.id, A.`count` - B.`count` FROM `video ` A INNER JOIN `video ` B ON A.`dat`= 56 and B.`dat` = 56 LIMIT 10 он возвращает ошибку BIGINT UNSIGNED value is out of range in я пробовал нагугли это CAST(... AS SIGNED) сделал запрос SELECT A.id, CAST(A.`count` - B.`count` AS SIGNED) FROM `video ` A INNER JOIN `video ` B ON A.`dat`= 56 and B.`dat` = 56 LIMIT 10 все равно ошибка
 

antonio

Moderator
Команда форума
т.е. поле count типа bigint unsigned. При вычислении тип результата видимо сохраняется и получается переполнение. Тогда тебе в руки плывет case с проверкой на больше и нужным действием. Или же придется приводить к нужному типу оба операнда в операции вычитания. Кстати, тогда не забудь про abs, а то можешь получить отрицательную разность.
 

antonio

Moderator
Команда форума
Что выводит ?
Код:
SELECT
    A.`hashtag`,
    A.`count`,
    B.`count`
FROM
    `vk_hashtag_stats` A
    inner JOIN `video` B ON
    (
        B.`dat` = "56"
        AND B.`dat`= A.`dat`
        and B.`hashtag` = A.`hashtag`
    )
ORDER BY
    1 DESC
LIMIT
    1,10
 
Последнее редактирование:

Тугай

Новичок
прирост это значит за дату 52 больше чем за дату 51, но может же быть и наоборот :)

объединять надо по id видео, чтоб не получилось что ты объединяешь по ид таблицы с счетчиками, не ясно что такое id из условия.
NULL в счетчике если от там есть тоже надо дополнительно учитывать, потому что 5-NULL будет NULL , а тебе скорей всего надо 5

Код:
SELECT A.id, A.count - B.count
FROM video A left JOIN video B ON  A.id = B.id
where
A.count > B.count
and A.dat=52 and B.dat=51
ORDER BY 2 DESC LIMIT 10
 
Сверху