select t1.ts as hival, t2.ts as loval
from metdata t1, metdata t2
where t2.ts = (select max(ts) from metdata t3
where t3.ts < t1.ts)
and not timediff(t1.ts, t2.ts) = '00:10:00'
Kueri ini akan mengembalikan bait yang dapat Anda gunakan untuk memilih data yang hilang. Data yang hilang akan memiliki stempel waktu antara hival dan loval untuk setiap bait yang dikembalikan oleh kueri.
EDIT - terima kasih sudah memeriksa, Craig
EDIT2 :
mendapatkan stempel waktu yang hilang - SQL ini menjadi sedikit lebih sulit untuk dibaca, jadi saya akan memecahnya sedikit. Pertama, kita membutuhkan cara untuk menghitung serangkaian nilai cap waktu antara nilai rendah yang diberikan dan nilai tinggi dalam interval 10 menit. Cara melakukan ini ketika Anda tidak dapat membuat tabel didasarkan pada sql berikut, yang menghasilkan semua digit dari 0 hingga 9.
select d1.* from
(select 1 as digit
union select 2
union select 3
union select 4
union select 5
union select 6
union select 7
union select 8
union select 9
union select 0
) as d1
...sekarang dengan menggabungkan tabel ini dengan salinan dirinya beberapa kali berarti kita dapat secara dinamis menghasilkan daftar dengan panjang tertentu
select curdate() +
INTERVAL (d1.digit * 100 + d2.digit * 10 + d3.digit) * 10 MINUTE
as date
from (select 1 as digit
union select 2
union select 3
union select 4
union select 5
union select 6
union select 7
union select 8
union select 9
union select 0
) as d1
join
(select 1 as digit
union select 2
union select 3
union select 4
union select 5
union select 6
union select 7
union select 8
union select 9
union select 0
) as d2
join
(select 1 as digit
union select 2
union select 3
union select 4
union select 5
union select 6
union select 7
union select 8
union select 9
union select 0
) as d3
where (d1.digit * 100 + d2.digit * 10 + d3.digit) between 1 and 42
order by 1
... sekarang bagian dari sql ini mendekati apa yang kita butuhkan. Ini memiliki 2 variabel input:
- stempel waktu awal (saya menggunakan curdate() dalam contoh); dan
- jumlah iterasi - di mana klausa menentukan 42 iterasi dalam contoh, maksimum dengan tabel 3 x digit adalah 1000 interval
... yang berarti kita dapat menggunakan sql asli untuk menggerakkan contoh dari atas untuk menghasilkan serangkaian cap waktu untuk setiap pasangan hival lowval. Bersabarlah, sql ini agak panjang sekarang...
select daterange.loval + INTERVAL (d1.digit * 100 + d2.digit * 10 + d3.digit) * 10 MINUTE as date
from
(select t1.ts as hival, t2.ts as loval
from metdata t1, metdata t2
where t2.ts = (select max(ts) from metdata t3
where t3.ts < t1.ts)
and not timediff(t1.ts, t2.ts) = '00:10:00'
) as daterange
join
(select 1 as digit
union select 2
union select 3
union select 4
union select 5
union select 6
union select 7
union select 8
union select 9
union select 0
) as d1
join
(select 1 as digit
union select 2
union select 3
union select 4
union select 5
union select 6
union select 7
union select 8
union select 9
union select 0
) as d2
join
(select 1 as digit
union select 2
union select 3
union select 4
union select 5
union select 6
union select 7
union select 8
union select 9
union select 0
) as d3
where (d1.digit * 100 + d2.digit * 10 + d3.digit) between 1 and
round((time_to_sec(timediff(hival, loval))-600) /600)
order by 1
...sekarang ada sedikit epik sql
CATATAN :menggunakan tabel angka 3 kali memberikan celah maksimum, itu akan mencakup sedikit lebih dari 6 hari