- Тъй като няма дефиниран първичен ключ, предполагам, че данните се въвеждат в последователен ред на
creation_date
иladder_level
. Запомнете тези данни се съхраняват по неподреден начин в MySQL. - Първо, трябва да използваме заявка за подизбор, за да получим данните в необходимия ред (както е подчертано в предишната стъпка). Прави впечатление, че
Order By
се изпълнява следSelect
клауза; така че първо ще трябва да сортираме данните и след това да използваме набора от резултати като Извлечена таблица . - Сега ще използваме помощта на User- дефинирани променливи
(постоянен и достъпен на ниво сесия). В друга извлечена таблица
user_init_vars
, ние ги инициализираме. - В
Select
клауза, ние сравняваме стойността на текущия ред с стойността на предишния ред. След сравнение, ние задаваме стойността на променливата на стойността на текущия ред. Можете да го мислите като техника на цикъл, която използваме в други езици за програмиране като PHP, C++, Java и др. Case .. When
изразите се използват за сравнение и определяне наladder_change
стойност.
Запитване №1
SELECT
dt.ID,
CASE WHEN DATE(@rd) <> DATE(dt.record_date) AND
dt.ladder_level > @ll
THEN 1
ELSE 0
END AS ladder_change,
@rd := dt.record_date AS record_date,
@ll := dt.ladder_level AS ladder_level
FROM (SELECT ID, record_date, ladder_level
FROM conv_example
ORDER BY ID, record_date, ladder_level) AS dt
CROSS JOIN (SELECT @rd := '',
@ll := '') AS user_init_vars;
| ID | ladder_change | record_date | ladder_level |
| ----- | ------------- | ------------------- | ------------ |
| 324 | 0 | 2016-09-15 00:00:00 | a |
| 324 | 0 | 2016-09-15 00:00:00 | b |
| 324 | 0 | 2017-04-07 00:00:00 | b |
| 324 | 0 | 2017-04-07 00:00:00 | c1 |
| 324 | 0 | 2018-09-08 00:00:00 | c1 |
| 324 | 0 | 2018-09-08 00:00:00 | e |
| 1234 | 0 | 2013-04-03 00:00:00 | |
| 1234 | 0 | 2014-07-03 00:00:00 | a |
| 1234 | 1 | 2015-04-01 00:00:00 | b |
| 1234 | 1 | 2016-09-15 00:00:00 | d |
| 1234 | 0 | 2017-02-04 00:00:00 | b |
| 1234 | 0 | 2017-04-03 00:00:00 | b |
| 1234 | 1 | 2017-04-07 00:00:00 | c1 |
| 1234 | 1 | 2018-09-08 00:00:00 | e |
| 31431 | 0 | 2013-04-03 00:00:00 | |
| 31431 | 0 | 2014-07-03 00:00:00 | a |
| 31431 | 1 | 2017-04-07 00:00:00 | c1 |
| 31431 | 1 | 2018-09-08 00:00:00 | e |