2013-03-16 17 views
6

znajduje się stół Remark który zawiera dane jak poniżej:Wybierz przedostatni rekord w każdej grupie

 SerialNo | RemarkNo | Desp 
============================================= 
      10 |   1 | rainy 
      10 |   2 | sunny 
      11 |   1 | sunny 
      11 |   2 | rainy 
      11 |   3 | cloudy 
      11 |   4 | sunny 
      12 |   1 | rainy 

Co zapytanie zwróci następujący wynik:

   10 |   1 | rainy 
      11 |   3 | cloudy 
      12 |  null | null 

Oznacza to, że druga ostatni rekord w każdej grupie powinien zostać zwrócony?

Założenie, że wszystkie uwagi nie dotyczą numeru seryjnego są ciągłe. Im większa liczba uwagi, tym później została sporządzona uwaga. Stąd drugi ostatni komentarz do SerialNo 10 to 1 z Despem "deszczowym".

+0

SELECT r1 * OD remark r1 LEFT JOIN uwaga r2 ON (r1.serial_no = r2.serial_no I r1.remark_no

+0

Czy nie powinien wracać '10 | 1 | Sunny'? –

+0

Flaga mówi mysql. –

Odpowiedz

5

Spróbuj:

select s.SerialNo, r.RemarkNo, r.Desp 
from (select SerialNo, max(RemarkNo) maxRemark from Remark group by SerialNo) s 
left join Remark r on s.SerialNo = r.SerialNo and s.maxRemark-1 = r.RemarkNo 
.

(SQLFiddle here.)

+0

Dziękuję, Mark. Zmieniłem trochę twój SQLFiddle, aby był bardziej czytelny dla siebie. http://sqlfiddle.com/#!2/d2cd5/4 –

0

Oto niektóre pseudo-kod SQL, aby zacząć:

select 
    penultimate.* 
from data as penultimate 
left join (
    /* query on data to return last row frome each group */ 
) as ultimate 
    on /* sql to join 2nd last record on each group to last group */ 
where not ultimate.SerialNo is null 
0

rozwiązanie całkowicie nieskuteczne, ale działa ...

SELECT 
    SerialNo, 
    RemarkNo, 
    (SELECT Desp 
    FROM Remarks 
    WHERE SerialNo = r3.SerialNo AND RemarkNo = r3.RemarkNo) Desp 
FROM (
    SELECT 
     r.SerialNo, 
     (SELECT r2.RemarkNo 
     FROM Remarks r2 
     WHERE r.SerialNo = r2.SerialNo 
     ORDER BY r2.RemarkNo DESC 
     LIMIT 1, 1) RemarkNo 
    FROM (SELECT DISTINCT SerialNo FROM Remarks) r) r3 

przykład robocza: http://sqlfiddle.com/#!2/a1f89/22