[英]MySQL select MAX(datetime) not returning max value
示例表:
id computer app version build date
---|---------|------|------------|-------|---------
1 | aaaa1 | app1 | 1.0.0 | 1 | 2013-11-11 09:51:07
2 | aaaa1 | app2 | 2.0.0 | 2 | 2013-11-12 09:51:07
5 | xxxx2 | app1 | 1.0.0 | 1 | 2013-11-13 09:51:07
3 | cccc3 | app2 | 3.1.0 | 1 | 2013-11-14 09:51:07
4 | xxxx2 | app1 | 1.0.0 | 2 | 2013-11-15 09:51:07
5 | cccc3 | app2 | 3.1.1 | 3 | 2013-11-16 09:51:07
6 | xxxx2 | app1 | 1.0.2 | 1 | 2013-11-17 09:51:07
7 | aaaa1 | app1 | 1.0.2 | 3 | 2013-11-18 09:51:07
所需的输出(不是确切的格式或列表顺序),在每台计算机上获取每个应用程序的最新安装:
7. aaaa1 - app1 - 1.0.2 - 3 - 2013-11-18 09:51:07
2. aaaa1 - app2 - 2.0.0 - 2 - 2013-11-12 09:51:07
6. xxxx2 - app1 - 1.0.2 - 1 - 2013-11-17 09:51:07
5. cccc3 - app2 - 3.1.1 - 3 - 2013-11-16 09:51:07
我的SQL语句:
SELECT
id,
computer,
app,
version,
build,
MAX(date) AS installed
FROM
data
WHERE
placement = 'xxx'
GROUP BY
app, computer
;
这给了我:
1. aaaa1 - app1 - 1.0.0 - 1 - 2013-11-11 09:51:07
并不是
7. aaaa1 - app1 - 1.0.2 - 3 - 2013-11-18 09:51:07
正如我所料。
如果我只选择MAX(日期)而没有别的,则MAX(日期)有效。 但后来我没有得到任何数据(只是最新日期)。
SELECT
MAX(date) AS installed
我不是一个SQL忍者,所以我很快就会因为这个而挠头。
试试这样:
SELECT d.id, d.computer, d.app, d.version, d.build, a.installed
FROM data d
INNER JOIN (
SELECT computer, app, max(DATE) AS installed
FROM data
GROUP BY computer, app
) a ON a.computer = d.computer AND a.app = d.app
WHERE placement = 'xxx'
内部查询为您提供每对计算机和应用程序的最大值(日期),然后您只需加入它以获取其余信息。
尝试通过强制转换Datetime字段
SELECT
id,
computer,
app,
version,
build,
MAX(cast(date as Datetime)) AS installed
FROM
data
WHERE
placement = 'xxx'
GROUP BY
app, computer, id, version, build
;
max - 是一个聚合函数,尝试将select语句中的所有列添加到GROUP BY
:
GROUP BY
app, computer, id, version, build.
这可能是因为您将日期存储为String,并且比较字符串的行为与比较整数不同。 您应该以unix时间戳格式存储日期,它们将更容易比较。 但需要额外的努力才能显示为正常的英语日期。
什么错了:
SELECT
id,
computer,
app,
version,
build,
`date` AS installed
FROM
data
WHERE
placement = 'xxx'
ORDER BY installed DESC
GROUP BY app;
MAX对我不起作用,有效的是附加子查询,我按日期预先排序:
SELECT d.id, d.computer, d.app, d.version, d.build, a.installed
FROM data d
INNER JOIN (
SELECT computer, app, date as installed
FROM (
SELECT computer, app, date
FROM data
ORDER BY date desc
) as t
GROUP BY computer, app
) a ON a.computer = d.computer AND a.app = d.app
WHERE placement = 'xxx'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.