2009-02-16 51 views
1

alt text http://img187.imageshack.us/img187/8453/testhc3.png表分組依據 - TSQL -

alt text http://img145.imageshack.us/img145/3306/test2bn4.png

的第一張照片是我的查詢。我需要在第二張照片中獲得結果。

select OrarioA, OrarioB, MAX(VW_DettaglioOrariLinee_FromAToB.IDOrario), dbo.VW_DettaglioOrariLinee_FromAToB.IDDettaglioOrarioA, dbo.VW_DettaglioOrariLinee_FromAToB.IDDettaglioOrarioB 
FROM   dbo.VW_DettaglioOrariLinee_FromAToB INNER JOIN 
         Tb_Linee ON dbo.VW_DettaglioOrariLinee_FromAToB.IDRelA = Tb_Linee.IDRelA AND 
         dbo.VW_DettaglioOrariLinee_FromAToB.IDRelB = Tb_Linee.IDRelB INNER JOIN 
         dbo.periodi ON dbo.VW_DettaglioOrariLinee_FromAToB.IDOrario = dbo.periodi.IDOrario INNER JOIN 
         dbo.relgiornisettimanaorarilinee ON dbo.VW_DettaglioOrariLinee_FromAToB.IDOrario = dbo.relgiornisettimanaorarilinee.IDOrario 

這是我真正的查詢:

WITH Tb_Linee AS 
(
    SELECT * FROM VW_rellineestazionamenti 
    WHERE 
    IDLINEA = @IDLINEA 
    AND 
    IDStazA = @IDStazA 
    AND 
    IDStazB = @IDStazB 
    AND 
    PosizioneA = @PosizioneA 
    AND 
    PosizioneB = @PosizioneB 
) 


select OrarioA, OrarioB, VW_DettaglioOrariLinee_FromAToB.IDOrario, dbo.VW_DettaglioOrariLinee_FromAToB.IDDettaglioOrarioA, dbo.VW_DettaglioOrariLinee_FromAToB.IDDettaglioOrarioB 
FROM   dbo.VW_DettaglioOrariLinee_FromAToB INNER JOIN 
         Tb_Linee ON dbo.VW_DettaglioOrariLinee_FromAToB.IDRelA = Tb_Linee.IDRelA AND 
         dbo.VW_DettaglioOrariLinee_FromAToB.IDRelB = Tb_Linee.IDRelB INNER JOIN 
         dbo.periodi ON dbo.VW_DettaglioOrariLinee_FromAToB.IDOrario = dbo.periodi.IDOrario INNER JOIN 
         dbo.relgiornisettimanaorarilinee ON dbo.VW_DettaglioOrariLinee_FromAToB.IDOrario = dbo.relgiornisettimanaorarilinee.IDOrario 

回答

3

如果你想只OrarioA分區:

SELECT OrarioA, OrarioB, IDOrario, IDDettaglioOrarioA, IDDettaglioOrarioB 
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY OrarioA ORDER BY OrarioB DESC, IDOrario DESC) AS rn 
    FROM table 
) t 
WHERE rn = 1 

,這將導致在結果上picture 2

如果您想通過OrarioAOrarioB分區:

SELECT OrarioA, OrarioB, IDOrario, IDDettaglioOrarioA, IDDettaglioOrarioB 
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY OrarioA, OrarioB ORDER BY IDOrario DESC) AS rn 
    FROM table 
) t 
WHERE rn = 1 

,但這不會在你的結果集中篩選出的第一行。

+0

解決,謝謝!!!! – Giomuti 2009-02-17 08:28:01

0

根據你在屏幕截圖中解釋的數據,我知道你需要id域爲由OrarioA和OrarioB分組的最高IDOrario?

SELECT IDDettaglioOrarioA, IDDettaglioOrarioB 
FROM TABLE 
GROUP BY 
OrarioA, OrarioB 
ORDER BY IDOrario DESC 

如果您需要選擇更多列,請隨意選擇。