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

这是小提琴

您也可以使用 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 回答