SQL - Sorgu Yardım: Yerel Maksimum bulma

4 Cevap php

Ben bir grafikten veri içeren bir tablo var.

örneğin

index  value
0      3
1      5
2      7
3      6
4      8
5      9
6      12
7      11
8      10
9      14
10     13

Ben, değeri bir yerel maksimum olduğu sonuç döndüren bir sorgu için gereken belirli bir dizin değer endeksi +1 ve dizin-1 de değerinden daha büyük yani.

Yani, örneğin kümesi için, bu indeksler listesini dönmelidir: 2, 6, 9 değerleri 7, 12, 14 karşılık.

I'm using PHP with SQLite. I can do it with a foreach-loop in php, but was wondering if there's an easy way to do it using just SQL commands.

Herhangi bir giriş mutluluk duyacağız.

4 Cevap

PHP tek bir döngü ile bunu SQL sorgusunun içine bu shoehorning çok daha hızlı olması muhtemeldir, ama sen gerçekten istiyorsanız gibi bir şey ile kendisi ile tabloyu kendine katılabilir:

SELECT b.index
FROM   points AS a, points AS b, points AS c
WHERE  a.index = b.index-1 AND c.index = b.index+1
   AND a.value < b.value   AND c.value < b.value

(Denenmemiş, yani * çapraz parmak *.)

Veya alt sorguları (bu test edilmiştir) kullanın:

select ind
from tmp1 t1
where val > (select val from jdoyle.tmp1 t2 where t2.ind = t1.ind-1)
and val > (select val from jdoyle.tmp1 t2 where t2.ind = t1.ind+1);

SQL veritabanı saklanan prosedürleri destekliyorsa, SQL saklı yordam içinde sizin döngü yazabilirsiniz. Ancak, sqlite böyle bir şey yapmak için zengin yeterli saklı prosedürleri vardır sanmıyorum, sen MySQL, PostgreSQL veya benzeri kullanmak gerekir.

Eğer üretim üzerinde sqlite kullanıyorum eğer Eh, sana verilerin büyük bir grup yok olduğunu düşünün. Bu göz önüne alındığında, en iyi çözüm gerçekten php düzeyde bunu çözmek için.