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

Симулирайте функцията на забавяне в MySQL

Това е любимият ми хак за MySQL.

Ето как емулирате функцията за забавяне:

SET @quot=-1;
select time,company,@quot lag_quote, @quot:=quote curr_quote
  from stocks order by company,time;
  • lag_quote съдържа стойността на котировката на предишния ред. За първия ред @quot е -1.
  • curr_quote съдържа стойността на котировката на текущия ред.

Бележки:

  1. order by клаузата е важна тук, точно както е в обикновена функция на прозореца.
  2. Може да искате да използвате изоставане за company само за да сте сигурни, че изчислявате разликата в котировките на една и съща company .
  3. Можете също да внедрите броячи на редове по същия начин @cnt:[email protected]+1

Хубавото на тази схема е, че изчислително е много слаб в сравнение с някои други подходи като използване на агрегатни функции, съхранени процедури или обработка на данни в сървъра на приложения.

РЕДАКТИРАНЕ:

Сега стигаме до въпроса ви за получаване на резултат във формата, който споменахте:

SET @quot=0,@latest=0,company='';
select B.* from (
select A.time,A.change,IF(@comp<>A.company,1,0) as LATEST,@comp:=A.company as company from (
select time,company,[email protected] as change, @quot:=quote curr_quote
from stocks order by company,time) A
order by company,time desc) B where B.LATEST=1;

Влагането не е съвместно свързано, така че не е толкова лошо (изчислително), колкото изглежда (синтактично) :)

Кажете ми, ако имате нужда от помощ за това.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как работи функцията UNHEX() в MySQL

  2. Код на грешка:1005. Не може да се създаде таблица...' (errno:150)

  3. mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows и т.н.... очаква параметър 1 да бъде ресурс

  4. Как да получите достъп до обект RowDataPacket

  5. Защо MySQL отчита синтактична грешка при FULL OUTER JOIN?