我有这个文件表(这里是简化版):
+------+-------+--------------------------------------+
| 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
我读了许多关于只获得左连接的第一行的线程,但是,由于某种原因,这对我不起作用.
这是我的结构(当然简化)
饲料
id | title | content
----------------------
1 | Feed 1 | ...
Run Code Online (Sandbox Code Playgroud)
艺术家
artist_id | artist_name
-----------------------
1 | Artist 1
2 | Artist 2
Run Code Online (Sandbox Code Playgroud)
feeds_artists
rel_id | artist_id | feed_id
----------------------------
1 | 1 | 1
2 | 2 | 1
...
Run Code Online (Sandbox Code Playgroud)
现在我想获得文章并加入第一位艺术家,我想到了这样的事情:
SELECT *
FROM feeds
LEFT JOIN feeds_artists ON wp_feeds.id = (
SELECT feeds_artists.feed_id FROM feeds_artists
WHERE feeds_artists.feed_id = feeds.id
LIMIT 1
)
WHERE feeds.id = '13815'
Run Code Online (Sandbox Code Playgroud)
只是为了获得feed_artists的第一行,但这已经不起作用了.
我无法使用TOP因为我的数据库而且我无法对结果进行分组,feeds_artists.artist_id因为我需要按日期对它们进行排序(我通过这种方式对结果进行分组,但结果不是最新的)
用OUTER …
a.2<-sample(1:10,100,replace=T)
b.2<-sample(1:100,100,replace=T)
a.3<-data.frame(a.2,b.2)
r<-sapply(split(a.3,a.2),function(x) which.max(x$b.2))
a.3[r,]
Run Code Online (Sandbox Code Playgroud)
返回列表索引,而不是整个data.frame的索引
我试图返回b.2每个子组的最大值a.2.我怎样才能有效地做到这一点?
select *
from records
where id in ( select max(id) from records group by option_id )
Run Code Online (Sandbox Code Playgroud)
此查询即使在数百万行上也能正常工作.但是从解释声明的结果可以看出:
QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------------------
Nested Loop (cost=30218.84..31781.62 rows=620158 width=44) (actual time=1439.251..1443.458 rows=1057 loops=1)
-> HashAggregate (cost=30218.41..30220.41 rows=200 width=4) (actual time=1439.203..1439.503 rows=1057 loops=1)
-> HashAggregate (cost=30196.72..30206.36 rows=964 width=8) (actual time=1438.523..1438.807 rows=1057 loops=1)
-> Seq Scan on records records_1 (cost=0.00..23995.15 rows=1240315 width=8) (actual time=0.103..527.914 rows=1240315 loops=1)
-> Index Scan using records_pkey on records (cost=0.43..7.80 rows=1 width=44) (actual time=0.002..0.003 rows=1 loops=1057)
Index Cond: (id = (max(records_1.id)))
Total …Run Code Online (Sandbox Code Playgroud) sql postgresql query-optimization greatest-n-per-group groupwise-maximum
我有一张employee桌子,上面有姓名和工资。
我想打印这两列,其中只有 2 条记录,即我工资最高和最低的员工的姓名。
它应该看起来像这样:
Name Salary
------------------
James 800
Samanth 3000
Run Code Online (Sandbox Code Playgroud)
以下代码不是我想要的,我想要 2 列中的最小值和最大值,并有 2 个名称代表每个值
SELECT
name, MIN(salary), MAX(salary)
FROM
employee
Run Code Online (Sandbox Code Playgroud) 我有一个包含四个字段的表,如下所示,
(UID是用户ID)
ID UID MUSIC DATE
1 0 a 2013-10-20
2 0 a 2013-10-21
3 0 a 2013-10-22
4 0 a 2013-10-24
5 0 b 2013-10-11
8 0 b 2013-10-15
10 0 c 2013-10-26
9 0 c 2013-10-25
7 0 c 2013-10-20
6 0 c 2013-10-18
11 0 d 2013-10-10
Run Code Online (Sandbox Code Playgroud)
如何使用MySQL Query从上表中检索所有第二高的日期?
预期结果:
ID UID MUSIC DATE
3 0 a 2013-10-22
5 0 b 2013-10-11
9 0 c 2013-10-25
Run Code Online (Sandbox Code Playgroud)
要么
ID UID MUSIC DATE
3 0 a 2013-10-22
5 0 …Run Code Online (Sandbox Code Playgroud) 我需要使用R按组查找变量的运行最大值.变量按组内的时间排序使用df[order(df$group, df$time),].
我的变量有一些NA,但我可以通过用零替换它来处理它.
这是数据框df的样子:
(df <- structure(list(var = c(5L, 2L, 3L, 4L, 0L, 3L, 6L, 4L, 8L, 4L),
group = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L),
.Label = c("a", "b"), class = "factor"),
time = c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L)),
.Names = c("var", "group","time"),
class = "data.frame", row.names = c(NA, -10L)))
# var group time
# 1 5 a 1
# 2 2 a 2
# 3 3 a …Run Code Online (Sandbox Code Playgroud) 我有下表:
-----------------------------------------------------------
ID oDate oName oItem oQty oRemarks
-----------------------------------------------------------
1 2016-01-01 A 001 2
2 2016-01-01 A 002 1 test
3 2016-01-01 B 001 3
4 2016-01-02 B 001 2
5 2016-01-02 C 001 2
6 2016-01-03 B 002 1
7 2016-01-03 B 001 4
ff.
Run Code Online (Sandbox Code Playgroud)
我想获得每个名字的最新记录。所以结果应该是这样的:
-----------------------------------------------------------
oDate oName oItem oQty oRemarks
-----------------------------------------------------------
2016-01-01 A 001 2
2016-01-01 A 002 1 test
2016-01-02 C 001 2
2016-01-03 B 002 1
2016-01-03 B 001 4
ff.
Run Code Online (Sandbox Code Playgroud)
有谁知道如何得到这个结果?
我正在使用Oracle 10g.我在
SQL上的 研究- 如何选择具有最大值列的行
和
http://jan.kneschke.de/projects/mysql/groupwise-max/
解决如何处理max(行)然后找到其他max(行)但是,我还没有.
标准: ID最大值(enroll_date)的代码必须为"WHEAT".
我不希望代码为"WHEAT"的最长注册日期.只有当代码为最大注册日期的"WHEAT"时,我才想要该行.
问题:如何编写查询以满足条件?
这不起作用,因为它返回ID = 30,Code = WHEAT,其中Date 12/25/2001不是该ID的最大值(日期).
select ID, code, max(enroll_date)
from enrollment
where CODE = 'WHEAT'
group by ID, code
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为它也返回ID = 30,Code = WHEAT,其中date = 12/25/2001.
select ID, code, max(enroll_date)
from enrollment
group by ID, code
having code='WHEAT'
Run Code Online (Sandbox Code Playgroud)
这是我的桌子
ENROLLMENT
===========================
ID CODE ENROLL_DATE
--------------------------
01 WHEAT <NULL>
01 WHEAT 12/21/2007
01 WHEAT 7/30/2009
30 WHEAT 12/25/2001
30 CHAFF 6/14/2010
72 WHEAT 8/20/2002
72 WHEAT …Run Code Online (Sandbox Code Playgroud) 我有一个表,我想为其选择由表中特定列的值定义的类别中的最新时间戳。
具体来说
SELECT *
FROM takelist
WHERE producer_name = 'sean'
AND bucket_id = '2CCEx15_1o'
Run Code Online (Sandbox Code Playgroud)
结果是
+-------------+---------------+------------+---------------------+
| takelist_id | producer_name | bucket_id | ts |
+-------------+---------------+------------+---------------------+
| 1 | sean | 2CCEx15_1o | 2013-10-07 18:29:00 |
| 4 | sean | 2CCEx15_1o | 2013-10-07 18:33:09 |
| 5 | sean | 2CCEx15_1o | 2013-10-07 18:33:38 |
| 27 | sean | 2CCEx15_1o | 2013-10-07 18:37:38 |
| 212 | sean | 2CCEx15_1o | 2013-10-14 18:36:05 |
| 236 | sean …Run Code Online (Sandbox Code Playgroud) 我正在尝试从 SQL 表中检索每条记录的最新数据。每条记录都会有重复的数据,并有一些数据变化。我需要检索最新的带时间戳的数据。有人可以建议哪个是性能方面的最佳解决方案吗?见过一些带有内部联接和子查询的解决方案。
下面给出的示例数据
Technology Students Amount Area Date
python 500 1000 Bangalore 2021-08-06 12:03:26
Ruby 100 1000 Bangalore 2021-08-06 05:18:50
Java 300 1000 Bangalore 2021-08-06 18:23:40
python 900 1000 Bangalore 2021-08-06 16:23:30
Java 100 1000 Bangalore 2021-08-06 12:23:50
Ruby 500 1000 Bangalore 2021-08-06 15:13:40
Run Code Online (Sandbox Code Playgroud)
我的 O/P 应该包含每种技术的最新数据
Technology Students Amount Area Date
Java 300 1000 Bangalore 2021-08-06 18:23:40
python 900 1000 Bangalore 2021-08-06 16:23:30
Ruby 500 1000 Bangalore 2021-08-06 15:13:40
Run Code Online (Sandbox Code Playgroud) mysql query-optimization database-performance groupwise-maximum
我想执行一个查询,仅选择给定组中的最新项目。
在此示例中,我正在跟踪货车:
check-in都会记录信息 - 里程等......delivery都会记录客户等......该表让我们了解给定的历史记录van。数据可以通过查询生成或随时存储 - 这不是问题。
id | checkin_id | delivery_id | van_id
----+------------+-------------+--------
24 | 15 | NULL | 3
25 | NULL | 28 | 3
26 | 16 | NULL | 4
27 | NULL | 29 | 3
28 | NULL | 30 | 4
29 | 17 | NULL | 5
Run Code Online (Sandbox Code Playgroud)
我可以通过使用 - 查询来查看货车的历史记录 ... WHERE van_id=3;。
相反,我希望能够获得vans他们最近的“事件”的列表。结果是这样的:
id | checkin_id …Run Code Online (Sandbox Code Playgroud) 鉴于以下简单表:
+-----+-------------+---------+----+
| id_ | match_op_id | version | p1 |
+-----+-------------+---------+----+
| 1 | 1 | 1 | 1 |
| 2 | 1 | 1 | 5 |
| 3 | 1 | 2 | 3 |
| 4 | 1 | 2 | 4 |
| 5 | 2 | 1 | 1 |
| 6 | 2 | 1 | 5 |
| 7 | 2 | 2 | 3 |
| 8 | 2 | …Run Code Online (Sandbox Code Playgroud)