Я работаю над веб-приложением на основе 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, на котором синие линии показывают зарегистрированных сотрудников, а черные линии показывают подтвержденное количество сотрудников, но вы, люди, можете наблюдать, что это показывает максимальный счет на определенную дату. например.если зарегистрирован 1 человек, то он показывает 1 на 01-01-2018, если еще 1 человек зарегистрировался в следующие два дня, тогда он показывает 2, если 2 человека зарегистрировались 05-01-2018, тогда он показывает 4
Я не хочу, чтобы это происходило, я хочу, чтобы число зарегистрированных пользователей в день.
, если 10 человек зарегистрировано 08-01-2018, то должно отображаться 10, если еще 20 человек зарегистрировано 09-01-2018, затем он показывает 20 аналогично для проверенного сотрудника