1

替代文字 http://img187.imageshack.us/img187/8453/testhc3.png

替代文字 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
4

2 回答 2

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

,这将导致结果集为 on picture 2

如果要按OrarioAand分区OrarioB

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

,但这不会过滤掉结果集中的第一行。

于 2009-02-16T19:30:33.893 回答
0

根据您在屏幕截图中解释的数据,我理解为您需要按 OrarioA 和 OrarioB 分组的最高 IDOrario 的 id 字段?

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

如果您需要选择更多列,请随意选择更多。

于 2009-02-16T21:28:45.123 回答