MySQL - Как найти строки с наибольшим изменением значения? - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь найти таблицу, в которой я ежедневно ранжировал ключевые слова (ключевые слова SEO). Поэтому у меня есть индекс key_id для каждого ключевого слова и новое значение позиции для каждого ключевого слова.

Я хотел бы узнать, как выбрать ключевые слова, которые имеют наибольшее изменение в значении?

MariaDB Таблица и данные:

CREATE TABLE IF NOT EXISTS `daily_rank` (
  `rankID` int(24) NOT NULL AUTO_INCREMENT,
  `created` timestamp NULL DEFAULT current_timestamp(),
  `key_id` int(100) NOT NULL DEFAULT 0,
  `position` int(12) NOT NULL DEFAULT 0,
  `keyword` varchar(50) NOT NULL DEFAULT '0',
  PRIMARY KEY (`rankID`),
  KEY `created` (`created`),
  KEY `key_id` (`key_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3594 DEFAULT CHARSET=latin1;

INSERT INTO `daily_rank` (`rankID`, `created`, `key_id`, `position`, `keyword`) VALUES
    (3594, '2019-10-09 17:59:07', 53, 4, 'SEO'),
    (3595, '2019-10-09 17:59:07', 100, 3, 'agency'),
    (3596, '2019-10-09 17:59:07', 397, 1, 'bureau marketing'),
    (3597, '2019-10-09 17:59:07', 798, 7, 'marketing agency'),
    (3598, '2019-10-09 17:59:07', 98, 8, 'search engine optimization'),
    (3599, '2019-10-09 17:59:07', 346, 8, 'website optimization'),
    (3600, '2019-10-09 17:59:07', 555, 9, 'agency'),
    (3608, '2019-10-08 18:07:00', 53, 4, 'SEO'),
    (3609, '2019-10-08 18:07:00', 100, 4, 'agency'),
    (3610, '2019-10-08 18:07:00', 397, 3, 'bureau marketing'),
    (3611, '2019-10-08 18:07:00', 798, 1, 'marketing agency'),
    (3612, '2019-10-08 18:07:00', 98, 2, 'search engine optimization'),
    (3613, '2019-10-08 18:07:00', 346, 2, 'website optimization'),
    (3614, '2019-10-08 18:07:00', 555, 2, 'agency'),
    (3615, '2019-10-07 18:07:22', 53, 4, 'SEO'),
    (3616, '2019-10-07 18:07:22', 100, 6, 'agency'),
    (3617, '2019-10-07 18:07:22', 397, 6, 'bureau marketing'),
    (3618, '2019-10-07 18:07:22', 798, 6, 'marketing agency'),
    (3619, '2019-10-07 18:07:22', 98, 4, 'search engine optimization'),
    (3620, '2019-10-07 18:07:22', 346, 6, 'website optimization'),
    (3621, '2019-10-07 18:07:22', 555, 6, 'agency'),
    (3622, '2019-10-07 18:07:22', 53, 5, 'SEO'),
    (3623, '2019-10-07 18:07:22', 100, 4, 'agency'),
    (3624, '2019-10-07 18:07:22', 397, 5, 'bureau marketing'),
    (3625, '2019-10-07 18:07:22', 798, 3, 'marketing agency'),
    (3626, '2019-10-07 18:07:22', 98, 6, 'search engine optimization'),
    (3627, '2019-10-07 18:07:22', 346, 3, 'website optimization'),
    (3628, '2019-10-07 18:07:22', 555, 5, 'agency'),
    (3629, '2019-10-06 18:07:44', 53, 1, 'SEO'),
    (3630, '2019-10-06 18:07:44', 100, 2, 'agency'),
    (3631, '2019-10-06 18:07:44', 397, 2, 'bureau marketing'),
    (3632, '2019-10-06 18:07:44', 798, 1, 'marketing agency'),
    (3633, '2019-10-06 18:07:44', 98, 1, 'search engine optimization'),
    (3634, '2019-10-06 18:07:44', 346, 2, 'website optimization'),
    (3635, '2019-10-06 18:07:44', 555, 2, 'agency'),
    (3636, '2019-10-06 18:07:44', 53, 2, 'SEO'),
    (3637, '2019-10-06 18:07:44', 100, 2, 'agency'),
    (3638, '2019-10-06 18:07:44', 397, 3, 'bureau marketing'),
    (3639, '2019-10-06 18:07:44', 798, 2, 'marketing agency'),
    (3640, '2019-10-06 18:07:44', 98, 2, 'search engine optimization'),
    (3641, '2019-10-06 18:07:44', 346, 1, 'website optimization'),
    (3642, '2019-10-06 18:07:44', 555, 1, 'agency'),
    (3643, '2019-10-06 18:07:44', 53, 1, 'SEO'),
    (3644, '2019-10-06 18:07:44', 100, 2, 'agency'),
    (3645, '2019-10-06 18:07:44', 397, 1, 'bureau marketing'),
    (3646, '2019-10-06 18:07:44', 798, 3, 'marketing agency'),
    (3647, '2019-10-06 18:07:44', 98, 2, 'search engine optimization'),
    (3648, '2019-10-06 18:07:44', 346, 1, 'website optimization'),
    (3649, '2019-10-06 18:07:44', 555, 3, 'agency'),
    (3650, '2019-10-06 18:07:44', 53, 3, 'SEO'),
    (3651, '2019-10-06 18:07:44', 100, 1, 'agency'),
    (3652, '2019-10-06 18:07:44', 397, 2, 'bureau marketing'),
    (3653, '2019-10-06 18:07:44', 798, 3, 'marketing agency'),
    (3654, '2019-10-06 18:07:44', 98, 1, 'search engine optimization'),
    (3655, '2019-10-06 18:07:44', 346, 2, 'website optimization'),
    (3656, '2019-10-06 18:07:44', 555, 1, 'agency');

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

Я представляю таблицу, подобную этой:

[Keyword] - [Todays Position] - [Position Change from yesterday] 

, где она упорядочена по наибольшему изменению по убыванию

ОБНОВЛЕНИЕ: при расчете max-min текущая позиция находится в пределах этойрасчет, и результат будет несколько искажен.

И при просмотре текущей позиции мне хотелось бы видеть ключевые слова, которые имели наибольшее изменение позиции с даты сравнения.

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Я думаю, что это то, что вы хотите.

SELECT a.keyword, a.position as today_position, b.biggest_position_change_since_yesterday
FROM daily_rank a
JOIN 
(SELECT keyword, MAX(position) - MIN(position) AS biggest_position_change_since_yesterday 
FROM daily_rank 
WHERE cast(created as date) >= ADDDATE(curdate(),-1) 
GROUP BY keyword) b
ON b.keyword = a.keyword
AND cast(created as date) = curdate()
ORDER by biggest_position_change_since_yesterday desc;

keyword                     today_position  biggest_position_change_since_yesterday
agency                      9               7
agency                      3               7
website optimization        8               6
marketing agency            7               6
search engine optimization  8               6
bureau marketing            1               2
SEO                         4               0

Контрольный пример:

DB <> FIDDLE

0 голосов
/ 09 октября 2019
SELECT keyword, MAX(position) max_position,MIN(position) min_position FROM daily_rank GROUP BY keyword;
+----------------------------+--------------+--------------+
| keyword                    | max_position | min_position |
+----------------------------+--------------+--------------+
| agency                     |            9 |            1 |
| bureau marketing           |            6 |            1 |
| marketing agency           |            7 |            1 |
| search engine optimization |            8 |            1 |
| SEO                        |            5 |            1 |
| website optimization       |            8 |            1 |
+----------------------------+--------------+--------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...