2017-09-18 5 views
0

Ma question est divisée en 2 parties:R - Date/Heure Les calculs

1ère partie:

J'ai une fonction, getdata() que j'utilise pour extraire des informations pour une plage de dates.

get_data <- function (fac_num, start_date, end_date) { 

    if (!(is.null(fac_num) | is.null(start_date) | is.null(end_date))) { 

    if(end_date - start_date > 7) { 
    start_date <- end_date - 7 

    #start_date <- as.Date('2017-07-05') 
    #end_date <- as.Date('2017-07-06') 
    #fac_num <- "005" 
    } 

    new_start_date <- paste0(start_date,' 05:00:00') 
    new_end_date <- paste0(end_date + 1,' 05:00:00') 


    qry <- paste0("SELECT FAC_NUM, USER_ID, APPL_ID, FUNC_ID, ST_ID, NXT_ST_ID, RESP_PRMT_DATA, 
       ST_DT_TM, END_DT_TM, RESP_PRMT_TY_CDE, 
       REQ_INP_DATA FROM OPSDBA.STG_RFS_INTERACTION WHERE TRANS_ST_DT_TM >= DATE'", 
       start_date,"' AND TRANS_ST_DT_TM BETWEEN TO_TIMESTAMP('",new_start_date,"', 'YYYY-MM-DD HH:MI:SS') AND TO_TIMESTAMP('",new_end_date,"', 'YYYY-MM-DD HH:MI:SS') 
       AND APPL_ID='CTS' AND FAC_NUM='",fac_num,"'") 

puis j'effectue des calculs sur celui-ci.

En outre, dans mon programme. J'utilise cette fonction getdata() pour extraire des données pour un nouvel ensemble d'analyses.

rf_log_perform <- get_data(display_facility_decode(input$facNum2), 
input$dateRange2, input$dateRange2 + 1) 

ici depuis que je suis en utilisant une seule date au lieu de la plage, j'ai ajouté un à la plage pour que la fonction getdata() fonctionnerait. Je voulais ensuite modifier la plage de dates de manière à ce qu'elle ne s'affiche plus après 11:59 pour la date sélectionnée.

rf_log_perform$date <- ifelse(strftime(rf_log_perform$st_dt_tm, format="%H:%M:%S")<'05:00:00', 
    format(as.POSIXct(strptime(rf_log_perform$st_dt_tm - 1*86400 , '%Y-%m-%d %H:%M:%S')),format = '%Y-%m-%d'), 
    format(as.POSIXct(strptime(rf_log_perform$st_dt_tm , '%Y-%m-%d %H:%M:%S')),format = '%Y-%m-%d')) 

En utilisant la fonction getdata(), je serais en mesure d'extraire des données pour la plage de dates 29/8/2017, 05:00:00 à 30/8/2017, 05:00:00 qui est considéré comme sois un jour dans mon exemple.

Mais pour mes calculs, je veux jeter tout ce qui est au-delà de 08/29/2017, 23:59:59 PM, pour des résultats plus précis. Pour cela, j'ai ajouté une instruction ifelse pour le trier. Mais cela ne se comporte pas comme je m'attends et je suis confus pourquoi pas.

+0

Quel est exactement le problème/la question? – Dave2e

Répondre

0

Malheureusement, je ne peux toujours pas commenter la question principale.

Je vous encourage à faire deux ajustements à votre question pour améliorer les chances de recevoir une réponse à votre question:

1) S'il vous plaît faire votre exemple reproductible par exemple fournissez des plages de dates, enveloppez votre code dans une fonction bien définie, etc.

2) Expliquez ce que vous essayez d'obtenir. Quelle est votre intention et résultat attendu.

+0

Heyy Christian, j'ai fait quelques changements à la question en y ajoutant plus d'infos. S'il vous plaît répondez si quelque chose d'autre doit être ajouté pour une meilleure compréhension. –