Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 基于日期的数据聚合_Database_Aggregate Functions_Visual Foxpro - Fatal编程技术网

Database 基于日期的数据聚合

Database 基于日期的数据聚合,database,aggregate-functions,visual-foxpro,Database,Aggregate Functions,Visual Foxpro,我有一张这样的桌子,日期d,金额n7,日期d。字段为贷款日期、金额、发放日期 这里,一条记录被认为是挂起的,它的发布日期为空。比如说, SELECT SUM(AMT) FROM TABLE WHERE RDATE = {} 给出截止日期的净未决金额 在计算给定日期的待定金额时,如果记录的发布日期为空或发布日期晚于给定日期,则该记录被视为待定!因此,要计算{2011-10-09}上的未决金额,查询为: SELECT SUM(AMT) FROM TABLE WHERE LDATE <= {2

我有一张这样的桌子,日期d,金额n7,日期d。字段为贷款日期、金额、发放日期

这里,一条记录被认为是挂起的,它的发布日期为空。比如说,

SELECT SUM(AMT) FROM TABLE WHERE RDATE = {}
给出截止日期的净未决金额

在计算给定日期的待定金额时,如果记录的发布日期为空或发布日期晚于给定日期,则该记录被视为待定!因此,要计算{2011-10-09}上的未决金额,查询为:

SELECT SUM(AMT) FROM TABLE WHERE LDATE <= {2011-10-09} AND (RDATE > {2011-10-09} OR RDATE = {})
注意:实际表有许多其他字段。为了简单起见,我这里只提到了重要的领域。RDBMS使用Microsoft Visual Foxpro 9.0

更新:添加了样本数据

CREATE TABLE VB(LDATE DATE, AMT NUMERIC(7), RDATE DATE);

INSERT INTO VB VALUES('2010-01-05', 12000, NULL);
INSERT INTO VB VALUES('2010-03-15', 25000, '2010-04-19');
INSERT INTO VB VALUES('2010-05-21', 31000, NULL);
INSERT INTO VB VALUES('2010-07-03', 58000, '2010-07-11');
INSERT INTO VB VALUES('2010-09-10', 47000, NULL);
INSERT INTO VB VALUES('2010-11-30', 63000, '2011-01-09');

INSERT INTO VB VALUES('2011-02-15', 21000, NULL);
INSERT INTO VB VALUES('2011-04-05', 52000, '2011-04-11');
INSERT INTO VB VALUES('2011-06-03', 13000, NULL);
INSERT INTO VB VALUES('2011-08-21', 85000, '2011-09-19');
INSERT INTO VB VALUES('2011-10-30', 74000, '2012-02-10');
INSERT INTO VB VALUES('2011-12-10', 36000, '2012-03-29');

INSERT INTO VB VALUES('2012-01-05', 15000, NULL);
INSERT INTO VB VALUES('2012-02-15', 25000, NULL);
INSERT INTO VB VALUES('2012-03-15', 35000, NULL);
INSERT INTO VB VALUES('2012-10-30', 30000, '2012-11-21');
INSERT INTO VB VALUES('2012-11-30', 31000, '2012-12-31');
INSERT INTO VB VALUES('2012-12-10', 12000, NULL);

谢谢

最简单的方法就是组建工会:

SELECT 2009 as yr, SUM(AMT) as amount
FROM TABLE
WHERE LDATE <= {2009-12-31} AND (RDATE > {2009-12-31} OR RDATE = {})
union all
SELECT 2010 as yr, SUM(AMT) as amount
FROM TABLE
WHERE LDATE <= {2010-12-31} AND (RDATE > {2010-12-31} OR RDATE = {})
union all
SELECT 2011 as yr, SUM(AMT) as amount
FROM TABLE
WHERE LDATE <= {2011-12-31} AND (RDATE > {2011-12-31} OR RDATE = {})

最简单的做法是成立工会:

SELECT 2009 as yr, SUM(AMT) as amount
FROM TABLE
WHERE LDATE <= {2009-12-31} AND (RDATE > {2009-12-31} OR RDATE = {})
union all
SELECT 2010 as yr, SUM(AMT) as amount
FROM TABLE
WHERE LDATE <= {2010-12-31} AND (RDATE > {2010-12-31} OR RDATE = {})
union all
SELECT 2011 as yr, SUM(AMT) as amount
FROM TABLE
WHERE LDATE <= {2011-12-31} AND (RDATE > {2011-12-31} OR RDATE = {})

更新:根据您现在提供的数据,以及其中包含的其他信息,例如rDate对于未付贷款不是空的,而是空的,下面是改进的查询:

选择YEARldate yr,SUMamt pamt; 来自vb; 其中rdate>DATEYEARldate,12,31或ISNULLrdate; 按年份分组; 输入光标结果

我从中得到的结果是:

2010年153000 2011 14400 2012年87000


根据我对您问题的理解,这是正确的。

更新:根据您现在提供的数据,以及其中包含的其他信息,例如rDate对于未付贷款不是空的,而是空的,下面是改进的查询:

选择YEARldate yr,SUMamt pamt; 来自vb; 其中rdate>DATEYEARldate,12,31或ISNULLrdate; 按年份分组; 输入光标结果

我从中得到的结果是:

2010年153000 2011 14400 2012年87000


根据我对您的问题的理解,这是正确的。

这很好,但如果我不知道表中记录的年数呢?这很好,但如果我不知道表中记录的年数呢?选择YEARloan_date yr,Sumrupes pamt FROM vb,其中loan_date YEARloan_date,12,31或ret_date={}按年分组。这一个提供了一些按年分组的金额,但金额肯定是错误的。有人能帮我得到正确的结果吗?从vb中选择YEARloan_date yr,Sumrupes pamt,其中loan_date YEARloan_date,12,31或ret_date={}按年份分组。这一项提供了一些按年份分组的金额,但金额肯定是错误的。有人能帮我得到正确的结果吗?对不起,那没用。它产生同样的结果!您能给我们创建游标和插入命令来设置一个我们可以使用的示例吗。@tamar-e-granor从样本数据中更新了问题SELECT 2010 YR,SUMANT PAMT From VB,其中LDATE DATE“2010-12-31”或RDATE为空;给2010年,153000。同样,2011年和2012年的pamt分别为234000和211000。我想要的是:2010年153000,2011年234000,2012年211000作为三行注:我不知道表中有多少年的数据,因此不能使用一些具体的年份值。查询必须是一个通用的查询,以检索每年的未决金额!请帮帮我…对不起,那没用。它产生同样的结果!您能给我们创建游标和插入命令来设置一个我们可以使用的示例吗。@tamar-e-granor从样本数据中更新了问题SELECT 2010 YR,SUMANT PAMT From VB,其中LDATE DATE“2010-12-31”或RDATE为空;给2010年,153000。同样,2011年和2012年的pamt分别为234000和211000。我想要的是:2010年153000,2011年234000,2012年211000作为三行注:我不知道表中有多少年的数据,因此不能使用一些具体的年份值。查询必须是一个通用的查询,以检索每年的未决金额!请帮帮我。。。