相关疑难解决方法(0)

SQL仅选择列上具有最大值的行

我有这个文件表(这里是简化版):

+------+-------+--------------------------------------+
| id   | rev   | content                              |
+------+-------+--------------------------------------+
| 1    | 1     | ...                                  |
| 2    | 1     | ...                                  |
| 1    | 2     | ...                                  |
| 1    | 3     | ...                                  |
+------+-------+--------------------------------------+
Run Code Online (Sandbox Code Playgroud)

如何为每个id选择一行并且只选择最大转速?
使用上面的数据,结果应该包含两行:[1, 3, ...][2, 1, ..].我正在使用MySQL.

目前,我在while循环中使用检查来检测并覆盖结果集中的旧转速.但这是实现结果的唯一方法吗?是不是有SQL解决方案?

更新
作为答案提示,有一个SQL的解决方案,并且这里sqlfiddle演示.

更新2
我注意到在添加上述sqlfiddle之后,问题被投票的速率超过了答案的upvote率.那不是故意的!小提琴是基于答案,特别是接受的答案.

mysql sql aggregate-functions greatest-n-per-group groupwise-maximum

1142
推荐指数
14
解决办法
107万
查看次数

检索每个组中的最后一条记录 - MySQL

有一个表messages包含如下所示的数据:

Id   Name   Other_Columns
-------------------------
1    A       A_data_1
2    A       A_data_2
3    A       A_data_3
4    B       B_data_1
5    B       B_data_2
6    C       C_data_1
Run Code Online (Sandbox Code Playgroud)

如果我运行查询select * from messages group by name,我会得到如下结果:

1    A       A_data_1
4    B       B_data_1
6    C       C_data_1
Run Code Online (Sandbox Code Playgroud)

什么查询将返回以下结果?

3    A       A_data_3
5    B       B_data_2
6    C       C_data_1
Run Code Online (Sandbox Code Playgroud)

也就是说,应返回每组中的最后一条记录.

目前,这是我使用的查询:

SELECT
  *
FROM (SELECT
  *
FROM messages
ORDER BY id DESC) AS x
GROUP BY name
Run Code Online (Sandbox Code Playgroud)

但这看起来非常低效.还有其他方法可以达到相同的效果吗?

mysql sql group-by greatest-n-per-group

887
推荐指数
17
解决办法
58万
查看次数

获取具有列的最大值的行

表:

UserId, Value, Date.
Run Code Online (Sandbox Code Playgroud)

我想得到UserId,每个UserId的max(Date)值.也就是说,具有最新日期的每个UserId的值.有没有办法在SQL中执行此操作?(最好是Oracle)

更新:对任何含糊不清的道歉:我需要获取所有UserIds.但对于每个UserId,只有该用户具有最新日期的那一行.

sql oracle greatest-n-per-group

556
推荐指数
10
解决办法
56万
查看次数

从分组的MySQL数据中获取最新日期

我的数据库中有以下数据:

|NO | model | date     | 
+---+-------+----------+
|1  | bee   |2011-12-01|
|2  | bee   |2011-12-05|
|3  | bee   |2011-12-12|
|4  | tar   |2011-12-13|
Run Code Online (Sandbox Code Playgroud)

我想获得每个模型组的最新日期:

| model | date     | 
+-------+----------+
| bee   |2011-12-12|
| tar   |2011-12-13|
Run Code Online (Sandbox Code Playgroud)

我试过了:

SELECT model, date 
FROM doc
WHERE date ........????? //what is the next?
GROUP BY model
Run Code Online (Sandbox Code Playgroud)

mysql sql date greatest-n-per-group

49
推荐指数
3
解决办法
9万
查看次数

从行中包含最大日期的表中选择信息

我的表看起来像这样:

group    date      cash  checks
  1    1/1/2013     0      0
  2    1/1/2013     0      800
  1    1/3/2013     0      700
  3    1/1/2013     0      600
  1    1/2/2013     0      400
  3    1/5/2013     0      200
Run Code Online (Sandbox Code Playgroud)

- 不需要现金只是证明该表中有更多信息

我想得到每个唯一的组,其中日期是最大值,检查大于0.所以返回看起来像这样:

group    date     checks
  2    1/1/2013    800
  1    1/3/2013    700
  3    1/5/2013    200
Run Code Online (Sandbox Code Playgroud)

尝试代码:

SELECT group,MAX(date),checks
    FROM table
    WHERE checks>0
    GROUP BY group
    ORDER BY group DESC
Run Code Online (Sandbox Code Playgroud)

问题虽然它给了我所有的日期和检查,而不仅仅是最大日期行.

使用ms sql server 2005

sql sql-server-2005 greatest-n-per-group

49
推荐指数
4
解决办法
30万
查看次数

SQL - 仅在一列上选择distinct

我已经远远地搜索了这个问题的答案.我正在使用Microsoft SQL Server,假设我有一个如下所示的表:

+--------+---------+-------------+-------------+
| ID     | NUMBER  | COUNTRY     | LANG        |
+--------+---------+-------------+-------------+
| 1      | 3968    | UK          | English     |
| 2      | 3968    | Spain       | Spanish     |
| 3      | 3968    | USA         | English     |
| 4      | 1234    | Greece      | Greek       |
| 5      | 1234    | Italy       | Italian     |
Run Code Online (Sandbox Code Playgroud)

我想执行一个只选择唯一"NUMBER"列的查询(无论是第一行还是最后一行都不会打扰我).所以这会给我:

+--------+---------+-------------+-------------+
| ID     | NUMBER  | COUNTRY     | LANG        |
+--------+---------+-------------+-------------+
| 1      | 3968    | UK          | English     | …
Run Code Online (Sandbox Code Playgroud)

sql sql-server unique distinct

40
推荐指数
2
解决办法
13万
查看次数

如何根据列+分组的最大值从MySQL中选择行

当用户查看特定网页时,我有一个包含(让我们说)的表格.用户当然可以多次查看页面,因此用户和页面可以有多个条目,如下所示:

nid     time    user  page_id
 25     8000       4      467
 24     7000       1      482
 23     6000       1      484
 22     5000       1      482
 21     4000       5      467
 20     3000       4      467
Run Code Online (Sandbox Code Playgroud)

我想做一个查询,返回与每个用户查看的每个页面对应的行.如果用户多次查看页面,我会获得与最近视图相对应的行(即最大值时间).因此,我应该得到这个:

nid     time    user  page_id
 25     8000       4      467
 24     7000       1      482
 23     6000       1      484
 21     4000       5      467
Run Code Online (Sandbox Code Playgroud)

我们丢失了第22行,因为用户1稍后查看了第482页,我们丢失了第20行,因为用户4稍后查看了第467页.

我几乎已经想到了这一点,但我不能完全破解它,同时也说服自己,我得到的结果通常是正确的,而不仅仅是我的测试用例的意外.我一直在GROUP BY或DISTINCT查询和嵌入式查询之间来回切换,然后我的大脑爆炸了.有什么建议?谢谢!

mysql sql group-by distinct

14
推荐指数
1
解决办法
3万
查看次数

mysql - 在子查询中排序

我使用以下查询与MySQL 5.5(或以前的版本)多年没有任何问题:

SELECT t2.Code from (select Country.Code from Country order by Country.Code desc ) AS t2;
Run Code Online (Sandbox Code Playgroud)

结果的顺序总是在我需要的时候下降.

上周,我刚刚迁移到一个新的MySQL版本(事实上,我已迁移到MariaDB 10.0.14),现在使用相同数据库的相同查询不再按降序排序.它按升序排序(或使用自然顺序排序,实际上不确定).

那么,有人可以告诉我这是一个错误还是这是对MySQL/MariaDB最新版本中行为的改变?

谢谢.

G.普兰特

mysql sql subquery sql-order-by mariadb

12
推荐指数
2
解决办法
1万
查看次数

sql left join + one to many relationship

我有三个表 - node,content_type_product和share_content.有可能是一个1:beetween节点和share_content N的关系.我想每个id只能输出一条记录.如果share_content中有多条记录,我想要最新的记录,即sc.auto_id的最高值

SELECT sc.uid, n.uid, n.nid, sc.message 
  FROM node n 
    LEFT JOIN content_type_product p ON n.nid = p.nid 
    LEFT JOIN share_content sc ON n.nid = sc.nid 
  WHERE n.nid = 40513 
  GROUP BY sc.nid
  ORDER BY sc.auto_id
Run Code Online (Sandbox Code Playgroud)

sql left-join

8
推荐指数
1
解决办法
1万
查看次数

Django:按不同列按最新过滤

有了这个FruitBasket模型,

水果篮(模型)类:
    水果= CharField(max_length = 128)
    计数= PositiveIntegerField()

还有这个样本数据

id水果数
----- ---------- -----
0苹果10
1个香蕉20
2苹果5
3香蕉30

我想要一个Django查询,它返回以下项目:

[(2,苹果,5),(3,香蕉,30)]

本质上,获取每个水果的“最新”行(在此示例中,我将时间戳简化为rowid。)

python sql django aggregate distinct

6
推荐指数
1
解决办法
4925
查看次数