Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL Връща 1,0 в нова променлива въз основа на случай, когато израз се отнася до множество други променливи

  • Тъй като няма дефиниран първичен ключ, предполагам, че данните се въвеждат в последователен ред на 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            |

Преглед на DB Fiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL 8 игнорира цели числа

  2. Преобразувайте дата на mySQL в дата на Javascript

  3. Как мога да внедря commit/rollback за MySQL в PHP?

  4. Как работи функцията TRIM() в MySQL

  5. MySQL my.ini местоположение