public List<NumSource> query(String where, Object[] o){ WorkDayDao workDayDao=new WorkDayDao(); List<WorkDay> workDays = workDayDao.query(where, o); WorkDay workDay = workDays.get(0); int nsnum = Integer.valueOf(workDay.getNsnum()); List<NumSource> list=new ArrayList<>(); String sql="select id,wid,serialnumber,date_format(ordertime,'%H:%i'),state from recode "+where; ResultSet rs=DBUtil.executeQuery(sql,o); try { while (rs.next()){ list.add(new NumSource(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5))); } } catch (SQLException e) { e.printStackTrace(); }finally { DBUtil.closeAll(); } return list; } public boolean update(String where, Object[] o){ String sql="update record "+where ; return DBUtil.executeUpdate(sql,o); }
时间: 2024-01-15 20:03:27 浏览: 24
这段代码是一个Java类中的两个方法,分别是query和update。
query方法的作用是根据传入的查询条件和参数,在数据库中查询符合条件的记录,并将结果封装成一个NumSource类型的List返回。具体实现是先调用WorkDayDao的query方法查询符合条件的工作日记录,然后获取第一条工作日记录,从中取出nsnum字段的值。然后根据传入的查询条件和参数,查询recode表中符合条件的记录,并将结果封装成NumSource对象放入List中返回。
update方法的作用是根据传入的条件和参数,更新数据库中的记录。具体实现是根据传入的条件和参数生成SQL update语句,然后调用DBUtil工具类的executeUpdate方法执行更新操作,最终返回更新是否成功的结果。
相关问题
hive 实现SELECT t1.date, CASE -- 如果当天是工作日,则直接取该天的保有 WHEN t1.is_workday = 1 THEN t1.holding -- 如果当天不是工作日,则取上一个工作日的保有 ELSE ( SELECT t2.holding FROM date_dimension t2 WHERE t2.is_workday = 1 AND t2.date < t1.date ORDER BY t2.date DESC LIMIT 1 ) END AS holding FROM date_dimension t1
这个 SQL 查询语句可以在 Hive 中执行。具体步骤如下:
1. 首先,你需要创建一个名为 date_dimension 的表,该表包含日期维度的数据,包括日期、是否是工作日、保有等字段。
2. 然后,你可以使用以下 SQL 查询语句来实现你的需求:
```
SELECT
t1.date,
CASE
WHEN t1.is_workday = 1 THEN t1.holding
ELSE (
SELECT t2.holding
FROM date_dimension t2
WHERE t2.is_workday = 1 AND t2.date < t1.date
ORDER BY t2.date DESC
LIMIT 1
)
END AS holding
FROM date_dimension t1;
```
这个语句中,我们首先选择日期、是否是工作日、保有等字段。然后,我们使用 CASE 语句来判断当天是否是工作日,如果是,直接取该天的保有;如果不是,就使用子查询来获取上一个工作日的保有。
这个查询语句中,我们使用了子查询来获取上一个工作日的保有。在子查询中,我们选择日期、保有等字段,并通过 WHERE 子句来过滤出工作日的日期。然后,我们使用 ORDER BY 子句来按日期倒序排序,这样可以获取到最近的一个工作日的保有。最后,我们使用 LIMIT 子句来限制结果集只返回一行数据,即最近的一个工作日的保有。
在 Hive 中执行这个查询语句时,需要确保你的数据和表结构与查询语句匹配,并且你已经正确地配置了 Hive 的运行环境。
帮我看下这个逻辑能不能实现上面的情景:select d1.sk_date as gmyjrq,d2.sk_date as gmdqrq from dw.dim_date d1 inner join dw.dim_date d2 on d1.workday_no +60 = d2.workday_no and d1.workday_flag = d2.workday_flag where d2.workday_flag = 1;其中dw.dim_date是日期维度表,包含字段工作日标记workday_flag和workday_no工作日序号
根据你提供的 SQL 语句,可以看出该语句是通过 inner join 连接两个日期维度表,其中 d1 表示起始日期维度,d2 表示结束日期维度。连接条件是 d1 的工作日序号加上 60 等于 d2 的工作日序号,并且两个日期维度的工作日标记都为 1,即是工作日。
因此,该 SQL 语句可以实现计算2021年8月5号往后推60个工作日的日期,并且自动跳过周末和节假日,只计算工作日。同时,该语句不需要手动指定节假日,而是通过日期维度表中的工作日标记和工作日序号进行计算,更加灵活方便。
需要注意的是,该语句的计算结果可能会受到日期维度表的数据范围和精度的影响,因此需要对日期维度表的数据进行检查和确认。另外,该语句只能计算从起始日期开始往后推60个工作日的日期,如果需要计算其他日期范围的工作日,需要修改对应的连接条件和查询条件。