gpt4 book ai didi

R中的MySQL使用GROUP BY过滤最早的日期

转载 作者:行者123 更新时间:2023-11-29 03:27:36 25 4
gpt4 key购买 nike

我在 SQL 数据库中有一个表,我想在 R 中检索它。但是在我用来从数据库中检索它的代码中,我想先在 SQL 查询中进行一些过滤。

示例数据。时间:

library(RMySQL)
mydb = dbConnect(MySQL(), user=***, password=***, dbname=***, host='127.0.0.1')
log = dbGetQuery(mydb, "select * FROM log_item;)

然后我得到一个类似的数据框:

firmwareVersion <- c("fw3","fw4","fw4","fw5","fw5")
date_created <- c("2015-09-01 21:04:10","2015-09-04 07:13:10","2015-10-03 15:23:09","2015-10-05 22:31:58","2015-10-06 23:34:03")
type <- c("type1","type1","type1","type2","type2")

log <- data.frame(firmwareVersion,date_created,type)

对于每个 type,我只需要具有最早日期的 firmwareVersion。所以我的结果应该是:

type1 || 2015-09-01 21:04:10 || fw3
type1 || 2015-09-04 07:13:10 || fw4
type2 || 2015-10-05 22:31:58 || fw5

我试过:

logDateMin = dbGetQuery(mydb, "select min(log_item.date_created) 
FROM log_item group by type,firmwareVersion;")

当我在 R 中尝试时,它永远不会完成查询并继续“计算”。我认为日期是字符串而不是日期,但我现在不知道如何转换它(我查了一下,但找不到合适的解决方案)。也没有“min(log_item.date_created)”但有“group by”它永远不会完成。如果没有两者,它会立即产生结果。

我知道我可以在 R 和 dplyr 中轻松做到这一点,但我有太多数据,我认为最好在 SQL 代码中做到这一点。有很多重复的固件版本,我只需要最旧的版本。

我希望我的信息足够详细,希望有人能帮助我。

谨致问候,

罗宾


为 SERBAN 编辑

firmwareVersion                  type     date_created
1.4.20@91347 128d491347 128d4 || type1 || 2015-09-26 13:43:55
1.4.20@91347 128d491347 128d4 || type1 || 2015-09-27 12:56:00
1.5.20@91347 128d491347 128d4 || type1 || 2015-09-28 12:19:28
1.4.20@91347 128d491347 128d4 || type2 || 2015-09-29 05:08:48
1.6.20@91347 128d491347 128d4 || type2 || 2015-09-29 11:43:19
1.6.20@91347 128d491347 128d4 || type2 || 2015-09-29 17:32:28
1.4.20@91347 128d491347 128d4 || type3 || 2015-09-29 17:37:36
1.5.20@91347 128d491347 128d4 || type3 || 2015-09-29 17:38:55
1.6.20@91347 128d491347 128d4 || type4 || 2015-09-29 17:47:12
1.6.20@91347 128d491347 128d4 || type4 || 2015-09-29 17:54:08

需要的结果:

1.4.20@91347 128d491347 128d4 || type1 || 2015-09-26 13:43:55
1.5.20@91347 128d491347 128d4 || type1 || 2015-09-28 12:19:28
1.4.20@91347 128d491347 128d4 || type2 || 2015-09-29 05:08:48
1.6.20@91347 128d491347 128d4 || type2 || 2015-09-29 11:43:19
1.4.20@91347 128d491347 128d4 || type3 || 2015-09-29 17:37:36
1.5.20@91347 128d491347 128d4 || type3 || 2015-09-29 17:38:55
1.6.20@91347 128d491347 128d4 || type4 || 2015-09-29 17:47:12

最佳答案

您从未指定要使用的 SQL 数据库类型。试试这个查询:

SELECT
type
,date_created
,firmwareVersion
FROM log_item
WHERE date_created = min(date_created)
ORDER BY type,firmwareVersion

一些数据库可能会提示 where 子句中的 min()。因此,在那种情况下,您将使用嵌套选择。

SELECT
type
,date_created
,firmwareVersion
FROM (
SELECT
type
,date_created
,firmwareVersion
,min(date_created) as min_date
FROM log_item)
WHERE date_created = min_date
ORDER BY type,firmwareVersion

关于R中的MySQL使用GROUP BY过滤最早的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34180555/

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