数据库查询语句如下
午餐详情统计
SELECT
STAFF.STAFF_NAME AS "姓名",
ORGAN.NAME AS "部门",
STAFF.STAFF_NO AS "工号",
ALOG.OPEN_TIME AS "刷卡时间"
-- ALOG.OWNER_ID AS "食堂"
FROM
T_ACCESS_LOG ALOG
LEFT JOIN T_STAFF STAFF ON ALOG.ACCESS_CARD_NO = staff.STAFF_NO
LEFT JOIN T_ORGAN ORGAN on STAFF.ORGAN_ID = ORGAN.id
WHERE
ALOG.ACCESS_CARD_NO = STAFF.STAFF_NO
AND ALOG.STAFF_NAME = STAFF.STAFF_NAME
-- AND STAFF.status = 1
AND (ALOG.OWNER_ID = 72324)
AND ALOG.OPEN_TIME BETWEEN TO_DATE (
'2021-11-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss'
)
AND TO_DATE (
'2021-11-30 23:59:59',
'yyyy-mm-dd hh24:mi:ss'
)
AND TO_CHAR(ALOG.OPEN_TIME, 'hh24:mi:ss') BETWEEN '10:30:00' AND
'14:00:00'
ORDER BY
ALOG.OPEN_TIME ASC
;
午餐次数统计:
SELECT
TEMP."NAME" AS "部门",
TEMP.STAFF_NAME AS "姓名",
count( * ) AS "总数"
FROM
(
SELECT
STAFF.STAFF_NAME,
ORGAN.NAME,
TO_CHAR( ALOG.OPEN_TIME, 'yyyy-mm-dd' )
FROM
T_ACCESS_LOG ALOG
LEFT JOIN T_STAFF STAFF ON ALOG.ACCESS_CARD_NO = staff.STAFF_NO
LEFT JOIN T_ORGAN ORGAN on STAFF.ORGAN_ID = ORGAN.id
WHERE
ALOG.ACCESS_CARD_NO = STAFF.STAFF_NO
AND ALOG.STAFF_NAME = STAFF.STAFF_NAME
-- AND STAFF.status = 1
AND ALOG.OWNER_ID = '72324'
AND ALOG.OPEN_TIME BETWEEN TO_DATE( '2021-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss' )
AND TO_DATE( '2021-11-30 23:59:59', 'yyyy-mm-dd hh24:mi:ss' )
AND TO_CHAR( ALOG.OPEN_TIME, 'hh24:mi:ss' ) BETWEEN '10:30:00'
AND '14:00:00'
GROUP BY
STAFF.STAFF_NAME,
ORGAN.NAME,
TO_CHAR( ALOG.OPEN_TIME, 'yyyy-mm-dd' )
) TEMP
GROUP BY
TEMP.STAFF_NAME,
TEMP."NAME";
午餐按天统计总数:
SELECT
TEMP.day AS "日期",
count(* ) AS "次数"
FROM
(
SELECT
STAFF.STAFF_NAME,
ORGAN.NAME,
-- AlOG.OPEN_TIME
TO_CHAR( ALOG.OPEN_TIME, 'yyyy-mm-dd' ) AS day
FROM
T_ACCESS_LOG ALOG
LEFT JOIN T_STAFF STAFF ON ALOG.ACCESS_CARD_NO = staff.STAFF_NO
LEFT JOIN T_ORGAN ORGAN on STAFF.ORGAN_ID = ORGAN.id
WHERE
ALOG.ACCESS_CARD_NO = STAFF.STAFF_NO
AND ALOG.STAFF_NAME = STAFF.STAFF_NAME
-- AND STAFF.status = 1
AND ALOG.OWNER_ID = '72324'
AND ALOG.OPEN_TIME BETWEEN TO_DATE( '2021-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss' )
AND TO_DATE( '2021-11-30 23:59:59', 'yyyy-mm-dd hh24:mi:ss' )
AND TO_CHAR( ALOG.OPEN_TIME, 'hh24:mi:ss' ) BETWEEN '10:30:00'
AND '14:00:00'
GROUP BY
STAFF.STAFF_NAME,
ORGAN.NAME,
-- ALOG.OPEN_TIME
-- -- ,
TO_CHAR( ALOG.OPEN_TIME, 'yyyy-mm-dd' )
) TEMP
GROUP BY
TEMP.day
-- TO_CHAR( TEMP.OPEN_TIME, 'yyyy-mm-dd' )
ORDER BY TEMP.day ASC;
晚餐详情统计:
SELECT
STAFF.STAFF_NAME AS "姓名",
ORGAN.NAME AS "部门",
STAFF.STAFF_NO AS "工号",
ALOG.OPEN_TIME AS "刷卡时间"
-- ALOG.OWNER_ID AS "食堂"
FROM
T_ACCESS_LOG ALOG
LEFT JOIN T_STAFF STAFF ON ALOG.ACCESS_CARD_NO = staff.STAFF_NO
LEFT JOIN T_ORGAN ORGAN on STAFF.ORGAN_ID = ORGAN.id
WHERE
ALOG.ACCESS_CARD_NO = STAFF.STAFF_NO
AND ALOG.STAFF_NAME = STAFF.STAFF_NAME
-- AND STAFF.status = 1
AND (ALOG.OWNER_ID = 72324)
AND ALOG.OPEN_TIME BETWEEN TO_DATE (
'2021-11-01 00:00:00',
'yyyy-mm-dd hh24:mi:ss'
)
AND TO_DATE (
'2021-11-30 23:59:59',
'yyyy-mm-dd hh24:mi:ss'
)
AND TO_CHAR(ALOG.OPEN_TIME, 'hh24:mi:ss') BETWEEN '17:30:00' AND
'21:00:00'
ORDER BY
ALOG.OPEN_TIME ASC
;
晚餐就餐次数统计:
SELECT
TEMP."NAME" AS "部门",
TEMP.STAFF_NAME AS "姓名",
count( * ) AS "总数"
FROM
(
SELECT
STAFF.STAFF_NAME,
ORGAN.NAME,
TO_CHAR( ALOG.OPEN_TIME, 'yyyy-mm-dd' )
FROM
T_ACCESS_LOG ALOG
LEFT JOIN T_STAFF STAFF ON ALOG.ACCESS_CARD_NO = staff.STAFF_NO
LEFT JOIN T_ORGAN ORGAN on STAFF.ORGAN_ID = ORGAN.id
WHERE
ALOG.ACCESS_CARD_NO = STAFF.STAFF_NO
AND ALOG.STAFF_NAME = STAFF.STAFF_NAME
-- AND STAFF.status = 1
AND ALOG.OWNER_ID = '72324'
AND ALOG.OPEN_TIME BETWEEN TO_DATE( '2021-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss' )
AND TO_DATE( '2021-11-30 23:59:59', 'yyyy-mm-dd hh24:mi:ss' )
AND TO_CHAR( ALOG.OPEN_TIME, 'hh24:mi:ss' ) BETWEEN '17:30:00'
AND '21:00:00'
GROUP BY
STAFF.STAFF_NAME,
ORGAN.NAME,
TO_CHAR( ALOG.OPEN_TIME, 'yyyy-mm-dd' )
) TEMP
GROUP BY
TEMP.STAFF_NAME,
TEMP."NAME";
晚餐按天统计:
SELECT
TEMP.day AS "日期",
count(* ) AS "次数"
FROM
(
SELECT
STAFF.STAFF_NAME,
ORGAN.NAME,
-- AlOG.OPEN_TIME
TO_CHAR( ALOG.OPEN_TIME, 'yyyy-mm-dd' ) AS day
FROM
T_ACCESS_LOG ALOG
LEFT JOIN T_STAFF STAFF ON ALOG.ACCESS_CARD_NO = staff.STAFF_NO
LEFT JOIN T_ORGAN ORGAN on STAFF.ORGAN_ID = ORGAN.id
WHERE
ALOG.ACCESS_CARD_NO = STAFF.STAFF_NO
AND ALOG.STAFF_NAME = STAFF.STAFF_NAME
-- AND STAFF.status = 1
AND ALOG.OWNER_ID = '72324'
AND ALOG.OPEN_TIME BETWEEN TO_DATE( '2021-11-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss' )
AND TO_DATE( '2021-11-30 23:59:59', 'yyyy-mm-dd hh24:mi:ss' )
AND TO_CHAR( ALOG.OPEN_TIME, 'hh24:mi:ss' ) BETWEEN '17:30:00'
AND '21:00:00'
GROUP BY
STAFF.STAFF_NAME,
ORGAN.NAME,
-- ALOG.OPEN_TIME
-- -- ,
TO_CHAR( ALOG.OPEN_TIME, 'yyyy-mm-dd' )
) TEMP
GROUP BY
TEMP.day
-- TO_CHAR( TEMP.OPEN_TIME, 'yyyy-mm-dd' )
ORDER BY TEMP.day ASC;
-- TEMP."NAME";
整理一下,双引号都改成\",把所有回车删了,弄成一整行。
用List<Map<String,Object>>接收返回的List参数。
@Query中的参数,nativeQuery = true,value是对应的数据库语句。
@Query(value = " SELECT TEMP.\"NAME\" AS \"dept\",TEMP.STAFF_NAME AS \"name\",count( * ) AS \"count\" FROM (SELECT STAFF.STAFF_NAME, ORGAN.NAME, TO_CHAR( ALOG.OPEN_TIME, 'yyyy-mm-dd' ) FROM T_ACCESS_LOG ALOG LEFT JOIN T_STAFF STAFF ON ALOG.ACCESS_CARD_NO = staff.STAFF_NO LEFT JOIN T_ORGAN ORGAN on STAFF.ORGAN_ID = ORGAN.id WHERE ALOG.ACCESS_CARD_NO = STAFF.STAFF_NO AND ALOG.STAFF_NAME = STAFF.STAFF_NAME AND ALOG.OWNER_ID = '72324' AND ALOG.OPEN_TIME BETWEEN TO_DATE( :startDateTime, 'yyyy-mm-dd hh24:mi:ss' ) AND TO_DATE( :endDateTime, 'yyyy-mm-dd hh24:mi:ss' ) AND TO_CHAR( ALOG.OPEN_TIME, 'hh24:mi:ss' ) BETWEEN '10:30:00' AND '14:00:00' GROUP BY STAFF.STAFF_NAME, ORGAN.NAME, TO_CHAR( ALOG.OPEN_TIME, 'yyyy-mm-dd' ) ) TEMP GROUP BY TEMP.STAFF_NAME, TEMP.\"NAME\"",nativeQuery = true)
public List<Map<String,Object>> lunchMealTimesByCount(@Param("startDateTime") String startDateTime, @Param("endDateTime") String endDateTime);
@Query(value ="SELECT STAFF.STAFF_NAME AS \"name\", ORGAN.NAME AS \"dept\", STAFF.STAFF_NO AS \"staffNo\", ALOG.OPEN_TIME AS \"openTime\" FROM T_ACCESS_LOG ALOG LEFT JOIN T_STAFF STAFF ON ALOG.ACCESS_CARD_NO = staff.STAFF_NO LEFT JOIN T_ORGAN ORGAN on STAFF.ORGAN_ID = ORGAN.id WHERE ALOG.ACCESS_CARD_NO = STAFF.STAFF_NO AND ALOG.STAFF_NAME = STAFF.STAFF_NAME AND (ALOG.OWNER_ID = 72324) AND ALOG.OPEN_TIME BETWEEN TO_DATE ( :startDateTime, 'yyyy-mm-dd hh24:mi:ss' ) AND TO_DATE ( :endDateTime, 'yyyy-mm-dd hh24:mi:ss' ) AND TO_CHAR(ALOG.OPEN_TIME, 'hh24:mi:ss') BETWEEN '10:30:00' AND '14:00:00' ORDER BY ALOG.OPEN_TIME ASC",nativeQuery = true)
public List<Map<String,Object>> lunchMealTimesDetail(@Param("startDateTime") String startDateTime, @Param("endDateTime") String endDateTime);
@Query(value = " SELECT TEMP.day AS \"day\", count(* ) AS \"count\" FROM ( SELECT STAFF.STAFF_NAME, ORGAN.NAME, TO_CHAR( ALOG.OPEN_TIME, 'yyyy-mm-dd' ) AS day FROM T_ACCESS_LOG ALOG LEFT JOIN T_STAFF STAFF ON ALOG.ACCESS_CARD_NO = staff.STAFF_NO LEFT JOIN T_ORGAN ORGAN on STAFF.ORGAN_ID = ORGAN.id WHERE ALOG.ACCESS_CARD_NO = STAFF.STAFF_NO AND ALOG.STAFF_NAME = STAFF.STAFF_NAME AND ALOG.OWNER_ID = '72324' AND ALOG.OPEN_TIME BETWEEN TO_DATE( :startDateTime, 'yyyy-mm-dd hh24:mi:ss' ) AND TO_DATE( :endDateTime, 'yyyy-mm-dd hh24:mi:ss' ) AND TO_CHAR( ALOG.OPEN_TIME, 'hh24:mi:ss' ) BETWEEN '10:30:00' AND '14:00:00' GROUP BY STAFF.STAFF_NAME, ORGAN.NAME, TO_CHAR( ALOG.OPEN_TIME, 'yyyy-mm-dd' ) ) TEMP GROUP BY TEMP.day ORDER BY TEMP.day ASC",nativeQuery = true)
public List<Map<String,Object>> lunchMealTimesByDay(@Param("startDateTime") String startDateTime, @Param("endDateTime") String endDateTime);
@Query(value = " SELECT TEMP.\"NAME\" AS \"dept\" , TEMP.STAFF_NAME AS \"name\", count( * ) AS \"count\" FROM ( SELECT STAFF.STAFF_NAME, ORGAN.NAME, TO_CHAR( ALOG.OPEN_TIME, 'yyyy-mm-dd' ) FROM T_ACCESS_LOG ALOG LEFT JOIN T_STAFF STAFF ON ALOG.ACCESS_CARD_NO = staff.STAFF_NO LEFT JOIN T_ORGAN ORGAN on STAFF.ORGAN_ID = ORGAN.id WHERE ALOG.ACCESS_CARD_NO = STAFF.STAFF_NO AND ALOG.STAFF_NAME = STAFF.STAFF_NAME AND ALOG.OWNER_ID = '72324' AND ALOG.OPEN_TIME BETWEEN TO_DATE( :startDateTime, 'yyyy-mm-dd hh24:mi:ss' ) AND TO_DATE(:endDateTime, 'yyyy-mm-dd hh24:mi:ss' ) AND TO_CHAR( ALOG.OPEN_TIME, 'hh24:mi:ss' ) BETWEEN '17:30:00' AND '21:00:00' GROUP BY STAFF.STAFF_NAME, ORGAN.NAME, TO_CHAR( ALOG.OPEN_TIME, 'yyyy-mm-dd' ) ) TEMP GROUP BY TEMP.STAFF_NAME, TEMP.\"NAME\"",nativeQuery = true)
public List<Map<String,Object>> dinnerMealTimesByCount(@Param("startDateTime") String startDateTime, @Param("endDateTime") String endDateTime);
@Query(value = " SELECT TEMP.day AS \"day\", count(* ) AS \"count\" FROM ( SELECT STAFF.STAFF_NAME, ORGAN.NAME, TO_CHAR( ALOG.OPEN_TIME, 'yyyy-mm-dd' ) AS day FROM T_ACCESS_LOG ALOG LEFT JOIN T_STAFF STAFF ON ALOG.ACCESS_CARD_NO = staff.STAFF_NO LEFT JOIN T_ORGAN ORGAN on STAFF.ORGAN_ID = ORGAN.id WHERE ALOG.ACCESS_CARD_NO = STAFF.STAFF_NO AND ALOG.STAFF_NAME = STAFF.STAFF_NAME AND ALOG.OWNER_ID = '72324' AND ALOG.OPEN_TIME BETWEEN TO_DATE( :startDateTime, 'yyyy-mm-dd hh24:mi:ss' ) AND TO_DATE(:endDateTime, 'yyyy-mm-dd hh24:mi:ss' ) AND TO_CHAR( ALOG.OPEN_TIME, 'hh24:mi:ss' ) BETWEEN '17:30:00' AND '21:00:00' GROUP BY STAFF.STAFF_NAME, ORGAN.NAME, TO_CHAR( ALOG.OPEN_TIME, 'yyyy-mm-dd' ) ) TEMP GROUP BY TEMP.day ORDER BY TEMP.day ASC",nativeQuery = true)
public List<Map<String,Object>> dinnerMealTimesByDay(@Param("startDateTime") String startDateTime, @Param("endDateTime") String endDateTime);
@Query(value = " SELECT STAFF.STAFF_NAME AS \"name\", ORGAN.NAME AS \"dept\", STAFF.STAFF_NO AS \"staffNo\", ALOG.OPEN_TIME AS \"openTime\" FROM T_ACCESS_LOG ALOG LEFT JOIN T_STAFF STAFF ON ALOG.ACCESS_CARD_NO = staff.STAFF_NO LEFT JOIN T_ORGAN ORGAN on STAFF.ORGAN_ID = ORGAN.id WHERE ALOG.ACCESS_CARD_NO = STAFF.STAFF_NO AND ALOG.STAFF_NAME = STAFF.STAFF_NAME AND (ALOG.OWNER_ID = 72324) AND ALOG.OPEN_TIME BETWEEN TO_DATE (:startDateTime, 'yyyy-mm-dd hh24:mi:ss' ) AND TO_DATE ( :endDateTime, 'yyyy-mm-dd hh24:mi:ss' ) AND TO_CHAR(ALOG.OPEN_TIME, 'hh24:mi:ss') BETWEEN '17:30:00' AND '21:00:00' ORDER BY ALOG.OPEN_TIME ASC",nativeQuery = true)
public List<Map<String,Object>> dinnerMealTimesDetail(@Param("startDateTime") String startDateTime, @Param("endDateTime") String endDateTime);