mysql 日期函数相关 及一个小sql写法

日光荏苒,我也负责mysql数据库的事情了。其实一点都不想做。

1. mysql的日期比较。

比如要查看或比较某个时间点 或者时间区间的数据,就要用到时间的比较。 一般mysql里字段的类型是 datetime。

datetime ,如果直接写<='2016-01-27 00:00:00' 进行比较 会造成少数据的问题。所以建议用unix_timestamp.

unix_timestamp(create_time) > unix_timestamp('2016-01-25 23:59:59') and unix_timestamp(create_time) < unix_timestamp('2016-01-26 23:59:59'); 


2.select a,b,count(b) from test where create_time >=CURDATE() group by a,b;

test 表里的 a,b 两列。  a代表用户, b代表事件,就是 用户a进行了事件b的次数。事件b ,分为 b1,b2,b3,。。

这个时候出来的结果是,仅仅显示事件不为0的条目。。

客户需要的是,即使事件bn 没有做过,也显示   a  bn  0.


想到的是 都是建立temp表, test_temp


方法一, 用left jion,但表test_temp 有2列,(用户An,事件Bn)  要把用户A 对应所有的事件刷一遍。 a,b1; a,b2;......

然后查询语句为:

select  a.task_org,a.task_status,count(b.task_status)
from test_temp  a
left join test b on a.task_status =b.task_status and a.task_org=b.task_org
and  b.create_time >=CURDATE()
group by a.task_org,a.task_status;



方法二:  只用1列 建立test_temp;

select task_org,task_status,sum(num) from (
select b.task_org,a.task_status,(case when a.task_status=b.task_status then num else 0 end) as num
from (select distinct task_status from test_temp )  a,
(select task_status,task_org,count(task_status) as num fromtest where unix_timestamp(create_time) > unix_timestamp('2016-01-27 00:00:00') and unix_timestamp(create_time) < unix_timestamp('2016-01-27 10:00:00') group by task_status,task_org) b) mn
group by task_org,task_status
;



PS:  更改一个表 某一列的COMMENT 语法:
alter table `A` modify column `logn` varchar(6) default null COMMENT '任务状态';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方-phantom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值