Количество сотрудников Зарегистрировано / проверено за день - PullRequest
0 голосов
/ 23 ноября 2018

Я работаю над веб-приложением на основе Spring MVC. Я реализовал графическое представление данных, относящихся к моему клиенту.Это очень просто, мне нужно проиллюстрировать количество зарегистрированных сотрудников и проверенных сотрудников на основе ежедневной регистрации и проверки.

Я написал следующий запрос:

 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;
    }
}

Как вы можете видеть, запрос извлекает данные от имени дня регистрации, но также стоит отметить, что он подсчитывает, как только пользователь регистрируется, он показывает максимальное количествона определенную дату.

Что я хочу, мне нужен точный зарегистрированный сотрудник рассчитывать на конкретный день.

Например: если 50 сотрудников будут зарегистрированы 24-11-2018 тогда счет должен быть проиллюстрирован как 50, а не как 50 + все предыдущие регистрации.

Аналогичный случай возникает для проверенного сотрудника.

Регистрация является первой фазой (В запросе, tot_reg, имеет местоколичество) Проверка является окончательной фазой (В запросе tot_ver, содержит счет)

Регистрация может быть получена по add_date, а проверка может быть получена по verify_date.

ДляБольше Для ясности я также приложил графическое изображение n, на котором синие линии показывают зарегистрированных сотрудников, а черные линии показывают подтвержденное количество сотрудников, но вы, люди, можете наблюдать, что это показывает максимальный счет на определенную дату.enter image description here например.если зарегистрирован 1 человек, то он показывает 1 на 01-01-2018, если еще 1 человек зарегистрировался в следующие два дня, тогда он показывает 2, если 2 человека зарегистрировались 05-01-2018, тогда он показывает 4

Я не хочу, чтобы это происходило, я хочу, чтобы число зарегистрированных пользователей в день.

, если 10 человек зарегистрировано 08-01-2018, то должно отображаться 10, если еще 20 человек зарегистрировано 09-01-2018, затем он показывает 20 аналогично для проверенного сотрудника

1 Ответ

0 голосов
/ 23 ноября 2018

Ваш SQL-запрос возвращает запрашиваемые вами данные, т. Е. Он возвращает день (который вы запутанно назвали monthyear) и количество сотрудников, зарегистрированных / проверенных в этот день

Это ваш код Java, которыйнакапливает количество

Измените это:

currentReg += data.getTotRegister();
currentVer += data.getTotVerify();

На это:

currentReg = data.getTotRegister();
currentVer = data.getTotVerify();

Обратите внимание, в запросе, похоже, есть ошибка:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...