Данные о тенденциях SQL
Я пытаюсь создать вызов базы данных Trending Posts для моей домашней страницы.
Лучший способ, которым я думал об этом, был бы составить 2 таблицы целых чисел.
Проблема, с которой я столкнулся, это сортировка этих результатов.
Вот как выглядит моя таблица, я отслеживаю последние 10 трендовых сообщений.
name trending clicks
post1 10 5
post2 9 15
post3 8 12
post4 7 10
post5 6 8
post6 5 8
post7 4 22
post8 3 18
post9 2 8
post10 1 8
Трендовая позиция обновляется каждые 4 часа, и клики сбрасываются до 0.
Из этих данных мне нужно вытащить посты в таком порядке
name trending clicks
post6 5 22
post8 3 18
post2 9 15
post3 8 12
post4 7 10
post5 6 8
post9 2 8
post10 1 8
post1 10 5
Вот еще один пример:
name trending clicks
post1 10 0
post5 6 9
post2 9 0
post3 8 0
post4 7 0
post6 5 0
post7 4 0
post10 1 3
post8 3 0
post9 2 0
Мне нужно отсортировать эти результаты, основываясь только на кликах, если они находятся выше трендовой позиции.
Пример: если пост № 8 получает больше кликов, чем позиция № 4, он займет свое место и сохранит порядок трендов, но использует эти клики также для упорядочения данных.
Оригинальные посты будут сохранять свою позицию до тех пор, пока пост в тренде не получит больше кликов, чем позиция, чтобы занять свое место.
Проблема, которую я пытаюсь решить, это когда я сбрасываю трендовые данные. Я сбрасываю данные каждые 4 часа, но хочу сохранить позиции и вес на каждом трендовом посте.
Я объяснил это достаточно хорошо, и кто-нибудь может мне помочь?
1 ответ
Почему это не работает для вас?
SELECT name, trending, clicks
FROM YourTable
ORDER BY clicks DESC
Но если вы хотите сохранить предыдущий тренд, вам нужно добавить весовой столбец.
SELECT name, trending, clicks, weight
FROM YourTable
ORDER BY ((clicks + weight) /2) DESC
Вместо сброса вашего тренда каждые 4 часа будет несложно рассчитать клики за последние 4 часа. Вы должны записывать данные для каждого клика
SELECT name, count(clicks) as clicks
FROM YourTable
WHERE datetime > DATEADD(h,-4,GETDATE())
GROUP BY name
ORDER BY count(clicks) DESC