SELECT * FROM table WHERE (hour(时间字段)>=22 or 6 >=hour(时间字段))
二、 查最接近的记录
查询场景:现在的需求是查询年龄最接近20岁的用户,获取前5个
我现在的数据库记录用户年龄的字段记录格式是"1995-05-20",字段名称birthday
解决思路:
1.首先查询时转换成用户年龄
日期格式转年龄的方法:
(1)当前年份 - 日期格式中的年份
date_format(now(),
'%Y'
) - from_unixtime(unix_timestamp(birthday),
'%Y'
)
(2)当前年份 - 日期格式中的年份(获取方法不同)
date_format(now(),
'%Y'
) -
year
(birthday)
2.通过order by asb()
排序获取最接近的数据
完整的语句:
SELECT
(date_format(now(), '%Y') - year(birthday)) as age
FROM user
WHERE
is_anchor = 1
ORDER BY abs(20 - age)
limit 0,5
三、查某个时间段的且最接近的记录数据
查询场景:现在的需求是查询某个用户在2020年中最早出单时间(凌晨5点-9点,且最接近5点的数据)和2020年中最晚出单时间(晚上10点-次日凌晨4点,取最靠近凌晨4点的出单时间)
我现在的数据库记录出单时间的字段记录格式是"yyyy-MM-dd HH:mm:ss",字段名称GMT_MODIFIED
解决思路:
最早出单时间:
1. 首先查询凌晨5-9点(小时 5-8)的数据, hour(p.GMT_MODIFIED) BETWEEN 05 and 08
2.再查最接近5点的数据 select hour(p.GMT_MODIFIED) as hourss from hip_sal_policy p where ORDER BY abs(5 - hourss)
最晚出单时间:
1. 首先查询晚上10点-次日凌晨4点(小时 22-4)的数据, hour(p.GMT_MODIFIED) >= 22 or 04 >= hour(p.GMT_MODIFIED)
2.再查最接近4点的数据 select hour(p.GMT_MODIFIED) as hourss from hip_sal_policy p where ORDER BY abs(4 - hourss)
完整sql
最早出单时间(凌晨5-9点)
select
DATE_FORMAT(p.GMT_MODIFIED,'%H:%i') policyTime,
hour(p.GMT_MODIFIED) as hourss
from hip_sal_policy p
where
p.status ='1' and p.creator = #{userId}
and p.GMT_MODIFIED BETWEEN '2020-01-01 00:00:00' and '2020-12-31 23:59:59'
and hour(p.GMT_MODIFIED) BETWEEN 05 and 08
ORDER BY abs(5 - hourss)
limit 1
最晚出单时间(晚上10点-次日凌晨4点)
select
DATE_FORMAT(p.GMT_MODIFIED,'%H:%i') policyTime,
hour(p.GMT_MODIFIED) as hourss
from hip_sal_policy p
where
p.status ='1' and p.creator = '675609'
and p.GMT_MODIFIED BETWEEN '2020-01-01 00:00:00' and '2020-12-31 23:59:59'
and (hour(p.GMT_MODIFIED) >= 22 or 04 >= hour(p.GMT_MODIFIED))
ORDER BY abs(4 - hourss)
limit 1
早上7点到九点早高峰时间段查询SELECT * FROM table WHERE hour(时间字段) BETWEEN 07 and 09 但是遇到一个问题就是要查凌晨的数据就不行了因为凌晨是当天到第二天 所以:凌晨数据查询SELECT * FROM table WHERE (hour(时间字段)>=22 or 6 >=hour(时间字段))查询场景:现在的需求是查询年龄最接近20岁的用户,获取前5个我现在的数据库记录用户年龄的字段记录格式是"1995-05
获取每一天的统计数据
做项目的时候需要统对项目日志做分析,其中有一个需求是获取某个给定的时间段内,每一天的日志数据,比如说要获取从2018-02-02 09:18:36到2018-03-05 23:18:36这个时间段内,统计出每一天的日志数据,一般情况下,看到这种需求都是考虑使用函数来搞定,直接上sql语句
SELECT
DATE_FORMAT(trigger_time, '%Y-%m-%d') triggerDay,
COUNT(id) triggerCount
`job_qrtz_trigger_log`
WHERE
trigger_time BETWEEN '20
String[] countArr = new String[23];
carSumList = orderMapper.selectNowCarData(storeId,countArr);
查询当天24小时 sql 语句
SELECT
count( u.id ) AS `value`,
s.date AS text
SELECT
date_add( DATE_FORMAT( CUR.
--按照时间段查询当前时间的前8点到后8点数据
--大于下列时间
select (case when GETDATE() < CONVERT(varchar(10),GETDATE(),120)+' 08:00:00'
then CONVERT(varchar(10),dateadd(dd,-1,GETDATE()),120)
else CONVERT(varchar(10),GETDATE(),120)
end)+' 08:00:00'
--小于下列时间
select (case.
declare @startTime datetime,@endTime datetime;
set @startTime='2021-7-6 00:00:00';
set @endTime='2021-7-7 00:00:00';
SELECT TOP 1000 QS.creation_time,SUBSTRING(ST.text,(QS.statement_start_offset/2)+1,((CASE QS.statement_end_offset WHEN -1 THEN DATALENGTH
其中,field_name为需要查询的字段名,table_name为需要查询的表名。
2. 通过执行上述SQL语句,我们可以得到所有重复数据的列表。如果需要删除其中的重复数据,可以按如下步骤操作:
(1) 首先,我们需要为表添加一个唯一索引,以防止未来再次出现重复数据。SQL语句如下:
ALTER TABLE table_name ADD UNIQUE INDEX index_name (field_name);
其中,table_name为需要添加索引的表名,index_name为索引的名称。
(2) 然后,我们可以使用MySQL的DELETE语句删除重复数据。SQL语句如下:
DELETE FROM table_name
WHERE field_name IN (
SELECT field_name
FROM (
SELECT field_name
FROM table_name
GROUP BY field_name
HAVING COUNT(*) > 1
) AS tmp
以上SQL语句会删除表中所有出现重复的字段值。注意,这里只删除出现重复的数据,如果有相同的值但没有重复出现的数据不会被删除。
综上所述,我们可以使用MySQL的GROUP BY语句和HAVING语句查询某个字段重复的数据,以及通过添加唯一索引和DELETE语句来删除重复数据。