Как изменить предложение where и добавить одновременно оператор SELECT на SQL Server? - PullRequest
0 голосов
/ 19 марта 2020
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 
}

Как l oop этот код на SQL сервере, чтобы время выполнения не было слишком длинным, и добавить его к тому же оператору выбора? Мне нужно oop запрос в SQL, чтобы он проходил через каждую дату, рыночную капитализацию и сектор и вычислял определенные вещи. Наконец, добавленный запрос будет записан в базу данных.

Примечание : приведенный выше запрос Select является просто примером запроса. В своей работе я делаю много вычислений, используя SQL.

Примечание: я не могу использовать команду «между» или «В», потому что в моих вычислениях я беру среднее значение столбца для этого конкретного дата, сектор и рыночная капитализация. Если я использую «между» для дат, он будет принимать среднее значение всех данных дат.

1 Ответ

2 голосов
/ 19 марта 2020

Вы можете использовать оператор BETWEEN в SQL для проверки диапазона дат.

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 настоятельно рекомендуется.

...