0
sect<-c("Healthcare","Basic Materials","Utilities","Financial Services","Technology","Consumer" 
"Defensive","Industrials","Communication Services","Energy","Real Estate","Consumer 
Cyclical","NULL")

mcap<-c("3 - Large","2 - Mid","1 - Small")

df_total = data.frame()
start <- as.Date("01-01-14",format="%d-%m-%y")
end   <- as.Date("18-03-20",format="%d-%m-%y")
theDate <- start

while (theDate <= end){
  for (value1 in sect){
    for (value2 in mcap){
        date=theDate
        sector<-value1
        marketcap1<-value2
        newquery("Select * from table where date='%s' and sector='%s' and 
        marketcap='%s'",date,sector,marketcap1)
        topdemo <- sqlQuery(dbhandle,newquery)
        df=data.frame(topdemo)
        df_total <- rbind(df_total,df)

 }
}
theDate <- theDate + 1 
}

如何在 SQL Server 中循环此代码以使执行时间不会太长并将其附加到同一个 select 语句中?我需要在 SQL 中循环查询,以便它遍历每个日期、市值和部门并计算某些事情。最后,附加的查询将被写入数据库。

注意Select上面显示的查询只是一个示例查询。在我的工作中,我使用 SQL 进行了大量计算。

注意:我不能使用 'between' 或 'In' 命令,因为在我的计算中,我取的是特定日期、行业和市值的列的平均值。如果我对日期使用“之间”,它将取所有给定日期的平均值。

4

1 回答 1

2

您可以在 SQL 中使用 BETWEEN 运算符来检查日期范围。

where date between '%s' and '%s'

您可以使用 IN 运算符检查列表中是否存在项目。

and sector in ('%s', '%s', ...)

您可以通过执行以下语句生成包含 R 中所有扇区的字符串,用双引号括起来并用逗号分隔,因此很容易将其插入 SQL 查询中。

sector.list <- paste0(sapply(sect, function(x) paste0("'", x, "'")), collapse = ", ")

print(sector.list)

输出

[1] "'Healthcare', 'Basic Materials', 'Utilities', 'Financial Services', 'Technology', 'Consumer', 'Defensive', 'Industrials', 'Communication Services', 'Energy', 'Real Estate', 'Consumer Cyclical', 'NULL'"

同样适用于mcap.

**** 关于提取平均值或其他聚合 *** 现在,如果您不想从数据库中获取所有详细信息,而只需要平均值或给定列,您可以按所需字段(日期、部门)对数据进行分组和 mcap)并提取平均值,例如:

SELECT avg(desired_column)
FROM (... your query here...)
GROUP BY data, sector, mcap

强烈建议参加 SQL 入门课程。

于 2020-03-19T12:31:31.943 回答