Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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
Sql 每天登记/核实的员工数量_Sql_Spring Mvc - Fatal编程技术网

Sql 每天登记/核实的员工数量

Sql 每天登记/核实的员工数量,sql,spring-mvc,Sql,Spring Mvc,我正在开发基于SpringMVC的web应用程序,我实现了与我的客户机相关的数据的图形表示。 这很简单,我需要说明每天注册和验证的注册员工和验证员工的数量 我在下面写了一个问题 SELECT monthyear ,SUM(CASE WHEN type='1' THEN total ELSE 0 END )as tot_ver ,SUM(CASE WHEN type='2' THEN total

我正在开发基于SpringMVC的web应用程序,我实现了与我的客户机相关的数据的图形表示。 这很简单,我需要说明每天注册和验证的注册员工和验证员工的数量

我在下面写了一个问题

 SELECT monthyear 
                        ,SUM(CASE WHEN type='1' THEN total ELSE 0 END )as tot_ver 
                        ,SUM(CASE WHEN type='2' THEN total ELSE 0 END )as tot_reg   
                    FROM ( 
                          SELECT  
                            TO_CHAR(verify_date,'YYYY-mm-dd') as monthyear 
                            ,SUM(CASE WHEN verify_status=1  THEN 1 ELSE 0 END )as total 
                            ,'1' as type  
                            FROM EMPLOYEE 
                            GROUP BY TO_CHAR(verify_date,'YYYY-mm-dd')  
                        UNION ALL 
                         SELECT TO_CHAR(add_date,'YYYY-mm') as monthyear  
                         ,SUM(CASE WHEN emp_id!=0  THEN 1 ELSE 0 END )as total 
                         ,'2' as type 
                         FROM EMPLOYEE 
                        GROUP BY TO_CHAR(add_date,'YYYY-mm-dd') 
                       )  
                    where monthyear IS NOT NULL    
                    GROUP BY monthyear 
                 ORDER BY monthyear 
和JAVA代码

 public TwoValueBean totRegisterUser() {
        String query = " SELECT monthyear"
                + "         ,SUM(CASE WHEN type='1' THEN total ELSE 0 END )as tot_ver"
                + "         ,SUM(CASE WHEN type='2' THEN total ELSE 0 END )as tot_reg  "
                + "     FROM ("
                + "           SELECT "
                + "             TO_CHAR(verify_date,'YYYY-mm') as monthyear"
                + "             ,SUM(CASE WHEN verify_status=1  THEN 1 ELSE 0 END )as total"
                + "             ,'1' as type "
                + "             FROM EMPLOYEE"
                + "             GROUP BY TO_CHAR(verify_date,'YYYY-mm') "
                + "         UNION ALL"
                + "          SELECT TO_CHAR(add_date,'YYYY-mm') as monthyear "
                + "          ,SUM(CASE WHEN emp_id!=0  THEN 1 ELSE 0 END )as total"
                + "          ,'2' as type"
                + "          FROM EMPLOYEE"
                + "         GROUP BY TO_CHAR(add_date,'YYYY-mm')"
                + "        ) "
                + "     where monthyear IS NOT NULL   "
                + "     GROUP BY monthyear"
                + "  ORDER BY monthyear";
        MapSqlParameterSource param = new MapSqlParameterSource();
        TwoValueBean bean = new TwoValueBean();
        try {
            List<TotalRegisterGraphData> list = getNamedParameterJdbcTemplate().query(query, param, new RowMapper<TotalRegisterGraphData>() {

                @Override
                public TotalRegisterGraphData mapRow(ResultSet rs, int rowNo) throws SQLException {
                    TotalRegisterGraphData regData = new TotalRegisterGraphData();
                    regData.setRegMonth(rs.getString("monthyear"));
                    regData.setTotRegister(rs.getLong("tot_reg"));
                    regData.setTotVerify(rs.getLong("tot_ver"));
                    return regData;
                }
            });
            if (list != null && list.size() > 0) {
                String reqDate = "";
                List<String> val1 = new ArrayList<String>();
                List<String> val2 = new ArrayList<String>();
                List<String> val3 = new ArrayList<String>();
                int currentVer = 0;
                int currentReg = 0;
                for (TotalRegisterGraphData data : list) {
                    currentReg += data.getTotRegister();
                    currentVer += data.getTotVerify();
                    val1.add("'" +data.getRegMonth()+ "'");
                    val2.add(String.valueOf(currentReg));
                    val3.add(String.valueOf(currentVer));
                }
                bean.setVal1(StringProcessorUtil.arrayToString(val1.toArray(new String[]{}), null));
                bean.setVal2(StringProcessorUtil.arrayToString(val2.toArray(new String[]{}), null));
                bean.setVal3(StringProcessorUtil.arrayToString(val3.toArray(new String[]{}), null));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bean;
    }
}
public TwoValueBean ToRegisterUser(){
String query=“选择月份”
+,总和(当type='1'时,则为total,否则为0结束)
+,总和(当type='2'时,则为total,否则为0结束)
+“从(”
+“选择”
+“将字符(验证日期'YYYY-mm')作为月份”
+,总和(当验证_状态为1时,则为1,否则为0结束)为总计
+“,'1'作为类型”
+“来自员工”
+“分组依据到字符(验证日期'YYYY-mm')”
+“全民联合”
+“选择将字符(添加日期,'YYYY-mm')作为月份”
+,总和(当emp_id!=0时,则为1,否则为0结束)作为总计
+“,'2'作为类型”
+“来自员工”
+“分组依据到字符(添加日期'YYYY-mm')”
+ "        ) "
+“其中monthyear不为NULL”
+“按月分组”
+“月令”;
MapSqlParameterSource param=新的MapSqlParameterSource();
TwoValueBean=新TwoValueBean();
试一试{
List List=getNamedParameterJdbcTemplate().query(查询,参数,新行映射器(){
@凌驾
公共TotalRegisterGraphData映射行(ResultSet rs,int rowNo)引发SQLException{
TotalRegisterGraphData regData=新的TotalRegisterGraphData();
regData.setRegMonth(rs.getString(“monthyear”);
regData.setTotRegister(rs.getLong(“tot_reg”);
regData.setTotVerify(rs.getLong(“tot_ver”);
返回注册表数据;
}
});
if(list!=null&&list.size()>0){
字符串reqDate=“”;
List val1=new ArrayList();
List val2=新的ArrayList();
List val3=new ArrayList();
int currentVer=0;
int currentReg=0;
用于(TotalRegisterGraphData:列表){
currentReg+=data.getToRegister();
currentVer+=data.getTotVerify();
val1.add(“”+data.getRegMonth()+“”);
val2.add(String.valueOf(currentReg));
val3.add(String.valueOf(currentVer));
}
setVal1(StringProcessorUtil.ArrayToArray(新字符串[]{}),null);
setVal2(StringProcessorUtil.ArrayToArray(新字符串[]{}),null);
setVal3(StringProcessorUtil.ArrayToArray(新字符串[]{}),null);
}
}捕获(例外e){
e、 printStackTrace();
}
返回豆;
}
}
正如大家所看到的,query代表注册日期获取数据,但它也是值得注意的,它将计数相加,一旦用户注册,它将显示特定日期的最大计数

我想要的是,我需要特定日期的准确注册员工人数

例如:如果50名员工将于2018年11月24日注册,则计数应显示为50,而不是50+之前的所有注册

类似的情况也发生在被核实的员工身上

注册是第一阶段(在查询中,
tot_reg
,保存计数) 验证是最后阶段(在查询中,
tot\u ver
,保存计数)

可通过
添加日期

和
验证可通过
验证\u日期
获得

为了更清晰,我还附上了图n,图中蓝线显示了注册员工,黑线显示了已核实的员工人数,但大家可以观察到,它显示了特定日期的最大人数。 例如 如果有1人注册,则在2018年1月1日显示1人 如果在接下来的两天多登记1人,则显示2人 如果2人在2018年1月5日登记,则显示4人

我不希望这种情况发生,我希望每天的用户注册计数

如果10人在2018年1月8日注册,则is应显示10人 如果另有20人在2018年1月9日登记,则显示为20人
类似地,对于已验证的员工,SQL查询将返回您请求的数据,即返回当天(您混淆地称之为monthyear)和当天注册/验证的员工计数

累积计数的是Java代码

改变这些:

currentReg += data.getTotRegister();
currentVer += data.getTotVerify();
为此:

currentReg = data.getTotRegister();
currentVer = data.getTotVerify();
注意,查询中似乎有一个bug:

SELECT TO_CHAR(add_date,'YYYY-mm') as monthyear --month precision, will give repeated rows
...
GROUP BY TO_CHAR(add_date,'YYYY-mm-dd') --day precision

粘贴在顶部框中的查询与java代码中的查询不匹配

请考虑删除此问题中的SQL标记Ohhkk非常感谢,但您不认为,对于每次迭代,我都会丢失以前的值。这就是你要求的?ohkk然后建议我解决方案,这样我可以跟踪每次迭代的每个值有4个变量;2个做你的
+=
,2个做你的
=