2013-09-21 14 views
6

Chcę wybrać min max i max min wartości dla każdej wartości w table1 z innej table2. próbka wejściaSELECT min max i max min wartość z części tabeli w MySQL

table2 
name, value,y 
f1, .01,.04 
f1,.02,.05 
f1,.05,.06 
f1,.45,.07 
f2,.03,.09 
f2,.05,.02 

table1 
name, value 
f1, .04 
f2,.04 

expected output 
table3 
name, value,min_max-value,max_min-value,y(min_max-value),y(max_min-value) 
f1, .04,.02,.05,.05,.06 
f2,.04,.03,.05,.09,.02 

Odpowiedz

2

można uzyskać wartości MAX i MIN od t2 z następującym zapytaniem:

SELECT 
    t1.name, 
    t1.value, 
    (SELECT min(value) FROM table2 t2 WHERE t2.name = t1.name), 
    (SELECT MAX(value) FROM table2 t2 WHERE t2.name = t1.name) 
FROM table1 t1 

EDIT: Aby uzyskać wartości bliżej t1.value i odpowiadającej wartości y można zrobić :

SELECT 
    t1.NAME, 
    t1.value, 
    (SELECT MAX(t2.value) 
     FROM table2 t2 
     WHERE t2.NAME = t1.NAME AND t2.value < t1.value) AS maxmin, 
    (SELECT MIN(t2.value) 
     FROM table2 t2 
     WHERE t2.NAME = t1.NAME AND t2.value > t1.value) AS minmax, 
    (SELECT t2.y 
     FROM table2 t2 
     WHERE t2.NAME = t1.NAME AND t2.value = (
      SELECT MAX(t3.value) 
      FROM table2 t3 
      WHERE t3.NAME = t1.NAME AND t3.value < t1.value 
      )) AS ymaxmin, 
    (SELECT t2.y 
     FROM table2 t2 
     WHERE t2.NAME = t1.NAME AND t2.value = (
      SELECT MIN(t3.value) 
      FROM table2 t3 
      WHERE t3.NAME = t1.NAME AND t3.value > t1.value 
      )) AS yminmax 
FROM table1 t1 

zobaczyć go w this fiddle

+0

sRY ..To nie daje ex pected result – Karunakar

+0

@ user2795017 Dlaczego mówisz, że nie daje oczekiwanych rezultatów? Zobacz [to skrzypce] (http://sqlfiddle.com/#!2/14597/1), aby zobaczyć, jak działa. Ah. jaki jest typ danych dla wartości? –

+0

cześć .. zobacz moje oczekiwane wyjście i sprawdź krzyżykiem za pomocą wyjścia ur ... Przeszedłem przez wyjście ur..it nie pasuje – Karunakar