2017-09-18 144 views
0

我的問題分爲兩個部分:的R - 日期/時間計算

第1部分:

我有一個函數,getdata()我用拉信息的日期範圍。

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,"'") 

然後我對它進行計算。

此外,在我的程序中。我使用這個getdata()函數爲新的一組分析提取數據。

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

在這裏,因爲我使用的只是一個單一的日期,而不是範圍內,我已經加入到一個範圍,以便getdata()功能會工作。

然後我想修改日期範圍,以便在選定的日期不會顯示過去11:59的任何內容。

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')) 

通過使用getdata()功能,我將能夠獲取數據的日期範圍內2017年8月29日,05:00:00至2017年8月30日,05:00:00這被認爲是在我的例子中是一天。

但是對於我的計算,我想放棄超出08/29/2017,11:59:59 PM的所有內容,以獲得更準確的結果。 爲此,我在那裏添加了一條ifelse語句來排序。但這並不像我預期的那樣行事,而且爲什麼不呢。

+0

究竟是什麼問題? – Dave2e

回答

0

不幸的是,我仍然不能評論主要問題。

我鼓勵你做出兩個調整你的問題,以改善得到一個回答你的問題的機會:

1)請讓你的例子可重複例如提供日期範圍,將代碼包裝在明確定義的功能中。

2)解釋你試圖達到的目標。你的意圖和預期的結果是什麼?

+0

Heyy christian,我對添加更多信息的問題做了一些更改。如果需要添加其他內容以便更好地理解,請回復。 –