0

我的问题分为两部分:

第一部分:

我有一个函数,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()函数,我将能够提取日期范围 08/29/2017、05:00:00 到 08/30/2017、05:00:00 的数据,在我的示例中这被认为是一天。

但是对于我的计算,我想丢弃 2017 年 8 月 29 日晚上 11:59:59 之后的所有内容,以获得更准确的结果。为此,我在ifelse其中添加了一个声明来解决这个问题。但这并不像我预期的那样表现,并且对为什么不这样做感到困惑。

4

1 回答 1

0

不幸的是,我仍然无法对主要问题发表评论。

我鼓励您对您的问题进行两项调整,以提高获得问题答案的机会:

1)请使您的示例可重现,例如提供日期范围,将您的代码包装在定义明确的函数中等。

2)解释你想要达到的目标。你的意图和预期结果是什么。

于 2017-09-18T13:53:44.800 回答