文章目录
- 一对多,多的一端只查询最新数据
- YEAR 年份函数
- MONTH 月份函数
- QUARTER 季度函数
- 往前递推十年
- 往后递推十年
- 查询去年12月份
- 统计身份证户籍所在地人数
一对多,多的一端只查询最新数据
ROW_NUMBER() over(PARTITION BY evt_id ORDER BY evt_node_receipt_time DESC)node from evt_info
适用场景:
事件——我要查出当前事件的最新节点。
一个事件发起下面很多个节点处置。一对多映射只要拿到最新的节点处置。
先来查一个事件id下面的所有节点,可以看到节点太多,如果按照往常的连表查询之后数据会有超级多。
现在按正常的连表查询,结果144条,不是我想要的结果。应该只要事件主表的所有数据
事件主表的所有数据
查询正在进行中的事件最新处置节点下的数据
select af.evt_id,af.evt_title,af.evt_type_name,af.nick_name as evtInitiatorName,af.evt_start_time,
af.evt_node_name,af.evt_longitude,af.evt_latitude
from (select ei.evt_id,ei.del_flag,ei.evt_status,ei.evt_start_time,ei.evt_title,ei.evt_longitude,ei.evt_latitude,
et.evt_type_name,su.nick_name,en.evt_node_name,
ROW_NUMBER() over(PARTITION BY en.evt_id ORDER BY en.evt_node_receipt_time DESC) node_rank
from evt_info ei
left join evt_node en
on en.evt_id=ei.evt_id
left join sys_user su
on ei.evt_initiator=su.user_id
left join evt_type et
on ei.evt_type_id = et.evt_type_id) af
WHERE af.node_rank = 1 and af.evt_status='processing' and af.del_flag=0
YEAR 年份函数
#查询注册时间是当年的用户
SELECT *
from sys_user
WHERE YEAR(create_time) = YEAR(NOW())
MONTH 月份函数
#统计每个月的注册人数
SELECT count(1)
from sys_user
GROUP BY MONTH(create_time)
QUARTER 季度函数
#统计每个季度的注册人数
SELECT QUARTER(create_time),count(1)
from sys_user
GROUP BY QUARTER(create_time)
往前递推十年
SELECT YEAR(DATE_SUB(NOW(), INTERVAL 10 YEAR))
往后递推十年
SELECT YEAR(DATE_ADD(NOW(), INTERVAL 10 YEAR))
查询去年12月份
#查询去年12月份
SELECT *
FROM sys_user
WHERE YEAR(create_time)=YEAR(DATE_SUB(NOW(), INTERVAL 1 YEAR))
AND MONTH(create_time)=12
统计身份证户籍所在地人数
SELECT `name`,count(a.id_card) as `value`
FROM
(
select t.id_card,
CASE LEFT(t.id_card,2)
WHEN 11 THEN '北京' WHEN 12 THEN '天津'
WHEN 13 THEN '河北省' WHEN 14 THEN '山西省'
WHEN 15 THEN '内蒙古自治区' WHEN 21 THEN '辽宁省'
WHEN 22 THEN '吉林省' WHEN 23 THEN '黑龙江省'
WHEN 31 THEN '上海' WHEN 32 THEN '江苏省'
WHEN 33 THEN '浙江省' WHEN 34 THEN '安徽省'
WHEN 35 THEN '福建省' WHEN 36 THEN '江西省'
WHEN 37 THEN '山东省' WHEN 41 THEN '河南省'
WHEN 42 THEN '湖北省' WHEN 43 THEN '湖南省'
WHEN 44 THEN '广东省' WHEN 45 THEN '广西壮族自治区'
WHEN 46 THEN '海南省' WHEN 50 THEN '重庆'
WHEN 51 THEN '四川省'WHEN 52 THEN '贵州省'
WHEN 53 THEN '云南省' WHEN 54 THEN '西藏'
WHEN 61 THEN '陕西' WHEN 62 THEN '甘肃省'
WHEN 63 THEN '青海' WHEN 64 THEN '宁夏回族自治区'
WHEN 65 THEN '新疆维吾尔自治区' end `name`
from basic_resident t WHERE t.outsider=0
) as a
group by `name`