gpt4 book ai didi

mysql - 计算不同日期 MySQL 返回一行

转载 作者:太空宇宙 更新时间:2023-11-03 11:34:01 25 4
gpt4 key购买 nike

好吧,准备好我在一个奇怪的基础上工作:每个表只有 3 列:varchar('Object'),varchar('Property'),varchar('Value')

这是我用自己尝试的例子制作的 fiddle http://sqlfiddle.com/#!9/de22eb/1

我需要提取上次更新服务器的时间。但我对服务器本身不感兴趣,更多的是关于日期。一旦我知道某个日期有更新,我就会计算当天的所有更新。

为此,我使用了 2 个表:服务器表

CREATE TABLE IF NOT EXISTS `server` (
`name` varchar(80) NOT NULL,
`field` varchar(80) NOT NULL,
`value` varchar(200) NOT NULL
);

和事件表:

CREATE TABLE IF NOT EXISTS `event` (
`name` varchar(80) NOT NULL,
`field` varchar(80) NOT NULL,
`value` varchar(80) NOT NULL
);

请去观看 fiddle 以了解内容。

我想要这样的结果(基于我的示例):

Date         Number patched
2017-11-14 2
2017-11-04 1

问题是我不知道我的查询哪里错了(为了更好地理解 fiddle 内部,我把这一步分开了):

Select date_format(d.val, '%Y-%m-%d') as 'Date', COUNT(distinct 
date_format(d.val, '%Y-%m-%d')) as 'Number'
FROM (
Select b.serv,b.val
FROM (
Select serv,val FROM (
Select name as serv, value as val FROM event
where field='server_vers' and
value!='None'
order by serv ASC,
val DESC LIMIT 18446744073709551615) a
group by a.serv) b,
server c
where b.serv = c.name and c.field = 'OS' and c.value = 'Fedora'
) d group by date_format(d.val, '%Y-%m-%d');

它只给我一行。在末尾添加 group by date_format(d.val, '%Y-%m-%d') 会使 Count 无用。我该如何解决?

我想为给定操作系统的每个服务器键入最后一个补丁日期,然后按日期对结果求和。

最佳答案

这是您需要的吗?

SELECT dates.date, COUNT(dates.date) as patch_count
FROM (
SELECT MAX(date_format(event.value, '%Y-%m-%d')) as date
FROM event
JOIN server ON (event.name = server.name)
WHERE (server.field = 'OS' AND server.value = 'Fedora')
GROUP BY event.name ) as dates
GROUP BY 1
ORDER BY 2 DESC

这是 fiddle :

http://sqlfiddle.com/#!9/de22eb/37/0

解释:我们获取每个服务器名称的最后日期。这给出了最后日期的列表。然后我们将其用作表格,我们可以对其进行分组以计算每个不同的值。

关于mysql - 计算不同日期 MySQL 返回一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47441045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com