我有这个文件表(这里是简化版):
+------+-------+--------------------------------------+
| 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
有一个表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)
但这看起来非常低效.还有其他方法可以达到相同的效果吗?
表:
UserId, Value, Date.
Run Code Online (Sandbox Code Playgroud)
我想得到UserId,每个UserId的max(Date)值.也就是说,具有最新日期的每个UserId的值.有没有办法在SQL中执行此操作?(最好是Oracle)
更新:对任何含糊不清的道歉:我需要获取所有UserIds.但对于每个UserId,只有该用户具有最新日期的那一行.
我的数据库中有以下数据:
|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) 我的表看起来像这样:
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
我已经远远地搜索了这个问题的答案.我正在使用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) 当用户查看特定网页时,我有一个包含(让我们说)的表格.用户当然可以多次查看页面,因此用户和页面可以有多个条目,如下所示:
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 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.普兰特
我有三个表 - 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) 有了这个FruitBasket模型,
水果篮(模型)类:
水果= CharField(max_length = 128)
计数= PositiveIntegerField()
还有这个样本数据
id水果数 ----- ---------- ----- 0苹果10 1个香蕉20 2苹果5 3香蕉30
我想要一个Django查询,它返回以下项目:
[(2,苹果,5),(3,香蕉,30)]
本质上,获取每个水果的“最新”行(在此示例中,我将时间戳简化为rowid。)