0

私はこのテーブルを持っていて、次のことをしたいと思います:

idstep   idproject   beg_date  end_date
   1        1
   2        1
   3        1
   4        1
   1        2
   2        2
   3        2
   4        2
   5        2
   1        3
   2        3
   3        3

「GROUP BY」を使用せずに各プロジェクトの最大ステップを取得する

GROUP BY 句を使用すると、次のような結果が得られます。

  SELECT MAX(idstep), idproject 
    FROM mytable
GROUP BY idproject;

結果:

    idstep     idproject
    4            1
    5            2
    3            3

この問題について誰か助けてくれませんか?

4

1 に答える 1

2

この特定のケースでは GROUP BY を使用する方が理にかなっていることに同意しますが、これは機能するはずです。

SELECT t.project, t.step
FROM YourTable t
  LEFT JOIN YourTable t2 on t.step < t2.step and t.project = t2.project
where t2.step IS NULL

そして、ここにFiddleがあります。

NOT EXISTS を使用することもできます (一晩中使用しているように感じます) が、個人的には LEFT JOIN / NULL アプローチを好みます。

SELECT t.project, t.step
FROM YourTable t
WHERE NOT EXISTS (
  SELECT *
  FROM YourTable t2 
  WHERE t.step < t2.step 
    AND t.project = t2.project
)

もっとフィドル: http://www.sqlfiddle.com/#!2/ebbc2/1

幸運を。

于 2013-02-03T05:59:01.963 に答える