简体   繁体   English

获取最大字段值等于 x 的行

[英]get row where max field value equals x

Let's say that I have a table like this in a mysql database:假设我在 mysql 数据库中有一个这样的表:

Id    number    version    date
1     123       1          2016-01-12
2     123       2          2016-01-13
3     124       1          2016-01-14
4     124       2          2016-01-15
5     124       3          2016-01-16
6     125       1          2016-01-17

I would like to get all the rows in my table where the value in the field version is the maximum value for each corresponding number .我想获取表中的所有行,其中字段version中的值是每个相应数字的最大值。 For example, I want to get this output:例如,我想得到这个输出:

Id    number    version    date
2     123       2          2016-01-13
5     124       3          2016-01-16
6     125       1          2016-01-17

I tried something like this:我试过这样的事情:

SELECT * FROM myTable WHERE version = (SELECT MAX(version) FROM myTable)

But the above query returned empty.但是上面的查询返回空。

Please help!请帮忙!

Use this用这个

select * 
from myTable 
     natural join 
     (select max(version) as version, number from myTable group by number) as T;

You sould use in clause and group by你应该使用 in 子句和 group by

for original version对于原始版本

SELECT * FROM myTable 

WHERE (version, number) in 
      (SELECT MAX(version), number FROM myTable group by number)

for versione edited对于版本编辑

SELECT * FROM myTable 
inner join myTable2 on myTable.id = myTable2.mytable_id
WHERE (version, number) in 
      (SELECT MAX(version), number FROM myTable group by number)

Here's a couple of options, and fiddles.这里有几个选项和小提琴。 These each select only rows that have a maximum version for their associated number .这些每个都只选择具有与其关联number最大版本的行。

(fiddle) (小提琴)

select * 
  from releases r1 
  where version = 
  (
    select max(version) 
    from releases 
    where number=r1.number
  );

(fiddle) Here is a (probably better) version: (小提琴)这是一个(可能更好)的版本:

select * from releases 
where (version, number) in (
  select max(version), number 
  from releases 
  group by number
);

SQLFIDDLE for this SQLFIDDLE 为此

http://sqlfiddle.com/#!9/a931fb/1 http://sqlfiddle.com/#!9/a931fb/1

SELECT * FROM demo WHERE version = (SELECT MAX(version) FROM demo)

This is working well这运行良好

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM