MySql返回不同行按sno DESC逐列排序

时间:2016-01-18 18:43:35

标签: mysql sql distinct

我有以下mysql表:enter image description here

在这个表中,可能有数千行,其中一些可能具有相同的fir_sno [第2列]。 我的问题是通过sno desc命令仅从此表顺序中选择不同的行。它应该返回sno:2,3。为此我尝试了以下sql查询,但它的返回行没有:1,3我需要行号:2,3。

UPDATE Table1, Table1 AS Table1_2 SET Table1_2.Field2 = [Table1]![Field2],
Table1_2.Field3= [Table1]![Field3], Table1_2.Field4= [Table1]![Field4]
WHERE (((Table1.ID)=2) AND ((Table1_2.ID)=5));

请帮助我完成我所需的工作?

感谢您宝贵的时间.l

2 个答案:

答案 0 :(得分:0)

您可以查看 在哪里f.sno<> p.fir_sno

答案 1 :(得分:0)

您正在分组,但没有使用聚合函数

考虑这个类似的例子

mysql> create table test (a int, b int, c int);
Query OK, 0 rows affected (0,47 sec)

mysql> insert into test values (1,1,1),(2,1,2),(3,2,3);
Query OK, 3 rows affected (0,08 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into test values (1,1,1),(2,1,2),(3,2,3);

mysql> select a, b, c from test group by b;
+------+------+------+
| a    | b    | c    |
+------+------+------+
|    1 |    1 |    1 |
|    3 |    2 |    3 |
+------+------+------+
2 rows in set (0,00 sec)

如果我正确理解您的问题,您需要的是在列a(在您的示例中为sno)中指定聚合,以便仅获取列b上每个组的最后一个(最高)值:

mysql> select max(a), b, c from test group by b;
+--------+------+------+
| max(a) | b    | c    |
+--------+------+------+
|      2 |    1 |    1 |
|      3 |    2 |    3 |
+--------+------+------+
2 rows in set (0,04 sec)

注意:这种方法在其他DBMS中不起作用,因为MySQL通过语法具有更宽松的组。供参考:http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html