[英]MYSQL equivalent of MS-Access function first() last()
为了更好地解释我需要什么,请查看下表:
ID --- image
A1 --- a1_01.jpg
A1 --- a1_02.jpg
B7 --- b7_01.jpg
B7 --- b7_02.jpg
D3 --- D3_04.jpg
D3 --- D3_99.jpg
... (From A to Z)
Z9 --- Z9_12.jpg
Z9 --- Z9_13.jpg
Z9 --- Z9_20.jpg
Z9 --- Z9_99.jpg
...and so on
我需要的结果是:
ID --- Image
A1 --- a1_01.jpg
B7 --- b7_01.jpg
D3 --- D3_04.jpg
...
Z9 --- Z9_12.jpg
...and so on
在MS-Access中,可以使用SELECT ID, First(image) AS 'Image' FROM Photos
来完成
如何在MYSQL中完成此操作?
请记住,这是一个样机表,用来说明我的问题。 我有无数的记录。 它不是一个(最小/最大)值!
===编辑:11/24/2012 ===
最终的SQL代码:
SELECT ID, Min(image) AS 'Image'
FROM Photos
GROUP BY ID
谢谢@triclosan & @iDevlop !!!
如我所见
select ID, min(image)
from tbl
group by ID
SELECT ID, Min(image) AS 'Image' FROM mockup GROUP BY ID
如果第一个图像也是具有最小值的图像,而最后一个图像也是具有最大值的图像,则此MySql查询将完全返回您想要的内容:
Select ID, min(image) as first_image, max(image) as last_image
From Tbl
Group By ID
否则,由于MySql没有first()
或last()
聚合函数,因此可以使用如下代码:
Select
Distinct ID,
(select image from tbl a where a.ID = tbl.ID order by something ASC LIMIT 1) as first_image,
(select image from tbl a where a.ID = tbl.ID order by something DESC LIMIT 1) as last_image,
From tbl
但请注意,您必须按某个字段对表格进行排序。 如果无法按某个字段对表进行排序,则无法分辨哪个值排在前,哪个值在后。
我经常看到这个查询,看起来不错,应该返回第一个字段:
Select ID, image
From tbl
Group by ID
这是一个通常可以正常工作的非标准Sql查询,并且(几乎?)总是正确返回第一个图像。 但是,由于image
不在group by
子句中,并且未与任何聚合函数相关联,因此服务器可以自由返回任何值。 似乎它总是返回第一个值,但不能保证,我更喜欢不使用它。
一些解释:
在您的示例中,最小值始终与第一个一致,因此无法从示例中看出是要查找最小值还是要查找第一个。
假设这是您的数据:
ID image
=============
A1 a1_02.jpg
A1 a1_01.jpg
如果您正在寻找最小值( A1, a1_01.jpg
),那么min(image)
正是您所需要的,它将起作用!
但是,如果您尝试获取A1, a1_02.jpg
,则在此示例中是第一个...那么我们就遇到了问题。 没有特定的ORDER BY,行将以不可预测的方式返回。 是的,它们经常/几乎总是按照它们在表空间中的顺序返回,但是我们不能依靠它。
例如,请参阅此问题和答案:
这意味着,如果我们不知道行的排序方式,就无法确定哪个是第一行,最后一个是哪行。 例如,请参见以下查询:
Select
Distinct ID,
(select image from tbl a where a.ID = tbl.ID LIMIT 1) as first_image
From tbl
这可能会返回您要查找的内容。 但是由于我省略了ORDER BY子句,所以不能保证它会一直工作。 并请注意,我还必须删除last_image,因为没有办法告诉MySql按默认顺序DESC对表进行排序,因为这种默认顺序不存在。
该查询可能还会返回第一个图像:
Select ID, image
From tbl
Group By ID
在标准SQL中,我们不能在select中引用未聚合的列,但在MySql中是可以的。 并且它可能会为每个ID返回第一个图像。 但是让我们看一下文档:
http://dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html
“服务器可以从每个组中自由选择任何值,因此,除非它们相同,否则选择的值是不确定的。” 因此,服务器几乎总是返回第一行的事实只是一个巧合,而没有记录在案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.