use*_*924 59 sql group-by max distinct min
这就是我想要做的.假设我有这张桌子:
id | record_date | other_cols
18 | 2011-04-03 | x
18 | 2012-05-19 | y
18 | 2012-08-09 | z
19 | 2009-06-01 | a
19 | 2011-04-03 | b
19 | 2011-10-25 | c
19 | 2012-08-09 | d
Run Code Online (Sandbox Code Playgroud)
对于每个id,我想选择包含最小record_date的行.所以我得到:
id | record_date | other_cols
18 | 2011-04-03 | x
19 | 2009-06-01 | a
Run Code Online (Sandbox Code Playgroud)
我在这个问题上看到的唯一解决方案是假设所有record_date条目都是不同的,但在我的数据中并非如此.使用带有两个条件的子查询和内部联接会给我一些id的重复行,这是我不想要的:
id | record_date | other_cols
18 | 2011-04-03 | x
19 | 2011-04-03 | b
19 | 2009-06-01 | a
Run Code Online (Sandbox Code Playgroud)
Adr*_*der 75
怎么样的
SELECT mt.*,
FROM MyTable mt INNER JOIN
(
SELECT ID, MIN(Record_Date) MinDate
FROM MyTable
GROUP BY ID
) t ON mt.ID = t.ID AND mt.Record_Date = t.MinDate
Run Code Online (Sandbox Code Playgroud)
这将获取每个ID的最小日期,然后根据这些值获取值.您有重复的唯一时间是同一ID的最小record_dates重复.
Mat*_*ath 13
我可以通过在mysql中执行此操作来达到预期的结果:
SELECT id, min(record_date), other_cols
FROM mytable
GROUP BY id
Run Code Online (Sandbox Code Playgroud)
这对你有用吗?
要获得每个类别中最便宜的产品,请在相关子查询中使用MIN()函数,如下所示:
SELECT categoryid,
productid,
productName,
unitprice
FROM products a WHERE unitprice = (
SELECT MIN(unitprice)
FROM products b
WHERE b.categoryid = a.categoryid)
Run Code Online (Sandbox Code Playgroud)
外部查询扫描products表中的所有行,并返回单位价格与相关子查询返回的每个类别中的最低价格匹配的产品.
| 归档时间: |
|
| 查看次数: |
141179 次 |
| 最近记录: |