我已经写了一个查询,拉取个人客户帐户和购买。在执行查询并研究数据之后,我注意到一些具有相同产品类别的个人帐户显示不同的开户日期。我需要更新我生成的查询表,以将具有相同产品类别的单个帐户设置为原始开户日期或最早开户日期(最小日期)。举个例子:
Account# Product.Cat Open.Date
15672 D 08/14/2015
15672 D 08/14/2015
15672 D 03/14/2016在本例中,我需要更新表,以便第三行的Open.Date等于最早的打开日期,即2015年8月14日。
根据我的研究,我最初认为如果这些条目的日期不等于最早的打开日期,我将不得不删除它们,但现在我相信我可以使用UPDATE、SET、WHERE和and语句的组合。我的问题是这个查询是用R编写的,当我运行我的查询时,它不会产生任何结果,也不会给我一个错误语句。我的代码如下所示,直到您看到差距和更新函数时,我的代码才能正常工作。
q1<- sqlQuery(ch,paste("SELECT
lic.t_b_z_act__AC_NAME,
lic.t_b_z_act_AC_ACCT_NBR,
lic.t_b_z_act_A_PROD_CAT,
lic.t_b_z_act_A_PROD_TYP,
lic.t_b_z_act_A_OPEN_DTE,
lic.t_b_z_act_PRCS_DTE,
lic.t_b_x_bal_BL_ACCT_NBR,
lic.t_b_x_bal_PRCS_DTE,
lic.t_b_x_bal_BL_BAL
FROM lic.t_b_z_act
Left JOIN lic.t_b_x_bal
ON lic.t_b_x_bal_BL_ACCT_NBR = lic.t_b_z_act_AC_ACCT_NBR and lic.t_b_x_bal_PRCS_DTE = lic.t_b_z_act_PRCS_DTE
WHERE AC_Dep_CAT<>'K'AND AC_Dep_CAT<>'C' AND AC_OPEN_DTE>'2014-10-30'
UPDATE t_b_a_act
SET AC_Open_DTE = MIN(AC_OPEN_DTE)
WHERE AC_NAME = AC_NAME AND AC_PROD_CAT=AC_PROD_CAT AND AC_OPEN_DTE>MIN(AC_OPEN_DTE);
"))发布于 2019-09-18 23:37:14
使用data.table
示例数据
dt <- fread("Account# Product.Cat Open.Date
15672 D 08/14/2015
15672 D 08/14/2015
15672 D 03/14/2016")代码
#set keys for sorting
setkey(dt, Product.Cat, Open.Date)
#set Open.Date by reference to the first Open.Date of each group
#whch is the earliest, because it is sorted by keys
dt[, Open.Date := Open.Date[1], by = .(Product.Cat)][]输出
Account# Product.Cat Open.Date
1: 15672 D 03/14/2016
2: 15672 D 03/14/2016
3: 15672 D 03/14/2016https://stackoverflow.com/questions/57996037
复制相似问题