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

Разлика между датите в два последователни реда

За PostgreSQL мисля, че искате lag функция прозорец за сравняване на редовете; ще бъде много по-ефективно от самостоятелно присъединяване и филтър. Това няма да работи с MySQL, тъй като изглежда все още не поддържа стандартните SQL:2003 функции на прозореца; вижте по-долу.

За да намерите само двата най-ниски, можете да използвате dense_rank функция прозорец над ticketid , след което филтрирайте резултатите, за да върнете само редове, където dense_rank() = 2 , т.е. ред с втората от най-ниската времева марка, където lag() ще произведе реда с най-ниско времеви печат.

Вижте този SQLFiddle който показва примерен DDL и изход.

SELECT ticketid, extract(epoch from tdiff) FROM (
  SELECT
      ticketid,
      ticketdate - lag(ticketdate) OVER (PARTITION BY ticketid ORDER BY ticketdate) AS tdiff,
      dense_rank() OVER (PARTITION BY ticketid ORDER BY ticketdate) AS rank
  FROM Table1
  ORDER BY ticketid) x
WHERE rank = 2;

Използвах ticketdate като име на колоната за дата, защото date е ужасно име за колона (това е име на тип данни) и никога не трябва да се използва; в много ситуации трябва да има двойни кавички, за да работи.

Преносимият подход вероятно е самоприсъединяването, публикувано от други. Подходът на функцията на прозореца по-горе вероятно работи и на Oracle, но изглежда не в MySQL. Доколкото мога да разбера, той не поддържа функциите на прозореца SQL:2003.

Дефиницията на схемата ще работи с MySQL, ако SET sql_mode = 'ANSI' и използвайте timestamp вместо timestamp with time zone . Изглежда функциите на прозореца няма да бъдат; MySQL се задушава от OVER клауза. Вижте този SQLFiddle .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL UPDATE с подзаявка, която препраща към същата таблица в MySQL

  2. Грешка при настройката на първоначалното хранилище в Pentaho Kettle

  3. Как да направите автоматично увеличение на първичния ключ на MySQL таблицата с някакъв префикс

  4. ниво на изолация на транзакциите добро обяснение

  5. Съхранение на подобни обекти в една и съща таблица спрямо множество таблици в базата данни