Jump to content

Max laika intervāls starp ierakstiem


Taksis
 Share

Recommended Posts

Sveicināti!

 

Ir process, kurš MS SQL tabulā EVENTS raksta notikumus (līdzīgi ka "event log") YYYYMMDDHHMMSS formātā.

 

Piemēram:

 

IF OBJECT_ID('events', 'U') IS NOT NULL DROP TABLE events;

CREATE TABLE events
(
  event_sequence_number INT NOT NULL IDENTITY(1,1) PRIMARY KEY, event_timestamp float    
);
GO

insert into events (event_timestamp) values (20180108121314), (20180108131415) , (20180108131516), (20180108151617)

 

select * from events

event_sequence_number		event_timestamp
1				20180108121314
2				20180108131415
3				20180108131516
4				20180108151617

 

Kādā veidā noteikt tos divus ierakstus starp kuriem ir vislielākais intervāls?

 

Šinī piemērā tie ir ieraksti #3 un #4.

Starpība - 20101 sekundes.

 

Piemēram SQL 2014 to atrod ar pieprasījumu:

SELECT  event_sequence_number, event_timestamp,
       Lead(event_timestamp, 1) OVER(ORDER BY event_timestamp) AS next_event_timestamp,
	   Lead(event_timestamp, 1) OVER(ORDER BY event_timestamp) - event_timestamp AS diff
FROM events
ORDER by  diff DESC;
event_sequence_number	event_timestamp	next_event_timestamp	diff
3			20180108131516	20180108151617		20101
1			20180108121314	20180108131415		10101
2			20180108131415	20180108131516		101
4			20180108151617	NULL			NULL

Kā to atrast bez "Lead" funkcijas?

 

Paldies.

 

 

 

Link to comment
Share on other sites

Ar storēto proceduru. Bet tas būs ilgi.

 

Vai arī tabulai + lauks diff un trigeris uz inserta kas izrēķina starpību ar iepriekšējo ierakstu. Bet tad tabulu nedrīkst labot. 

Link to comment
Share on other sites

pirms 2 stundām , Ronalds teica:

MariaDB kas ir uzlabots MySQL

Taksim vajadzēja MS SQL

 

Ja sequence_number iet pēc kārtas, derēs šis skripts:
 

SELECT *, ev.event_timestamp-evn.event_timestamp as diff
FROM events ev
INNER JOIN events evn ON ev.event_sequence_number=evn.event_sequence_number+1
ORDER BY diff desc

ja ne, tad jānumurē pašam ar ROW_NUMBER() funkciju subselektā.

Link to comment
Share on other sites

pirms 15 stundām , Taksis teica:

kurš MS SQL

Jā sajaucu....

 

BET!!!

 

pirms 15 stundām , Taksis teica:

Piemēram SQL 2014

Vai tad tas nav MS SQL?????  Tāpēc jau arī sajaucu...

Link to comment
Share on other sites

pirms 7 stundām , basic teica:

SELECT *, ev.event_timestamp-evn.event_timestamp as diff FROM events ev INNER JOIN events evn ON ev.event_sequence_number=evn.event_sequence_number+1 ORDER BY diff desc

 

Paldies. Interesants risinājums.

Nezināju, ka tabulu ar alias var referencēt pašu uz sevi.

 

Diemžēl nav garantijas, ka sequence_number iet pēc kārtas.

Paldies par ideju ar ROW_NUMBER().

Papētīšu kā to izdarīt.

 

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...