mysql sql查询语句语句查询,每隔7天的数据

编程开发子分类SqlServer/MySql查询某个数据库中表的数量
SqlServer/MySql查询某个中表的数量
MySql的统计方法
SELECT count( * ) FROM information_schema.tables WHERE TABLE_SCHEMA = '库名'
SqlServer的统计方法
select count(*) as TableCount from
sysobjects where type='u' and status&=0
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'转过路角忽然发现,3岁的儿子已在路口等着自己回来。
在0℃的江苏无锡街头,环卫工用双手疏通下水道。
声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
  在MySQL的学习过程中,最复杂,最考验SQL功底的就是SELECT查询语句了。下面总结一下在WEB网站开发中比较实用的时期查询SQL语句。假设MySQL数据库表中时间字段为add_time,类型为datetime。
  1、查询当天
  SELECT * FROM `article` WHERE to_days(`add_time`) = to_days(now());
  2、查询昨天
  SELECT * FROM `article` WHERE to_days(now()) C to_days(`add_time`) = 1;
  3、查询最近7天
  SELECT * FROM `article` WHERE date_sub(curdate(), INTERVAL 7 DAY) &= DATE(`add_time`);
  SELECT * FROM `article` WHERE curdate()- INTERVAL 7 DAY &= DATE(`add_time`);
  4、查询最近30天
  SELECT * FROM `article` WHERE date_sub(curdate(), INTERVAL 30 DAY) &= DATE(`add_time`);
  SELECT * FROM `article` WHERE curdate()-INTERVAL 30 DAY &= DATE(`add_time`);
  5、查询截止到当前本周
  SELECT * FROM `article` WHERE YEARWEEK(date_format(`add_time`,'%Y-%m-%d')) = YEARWEEK(now());#默认从周日开始到周六
  SELECT * FROM `article` WHERE YEARWEEK(date_format(`add_time`,'%Y-%m-%d'),1) = YEARWEEK(now(),1);#设置为从周一开始到周日
  6、查询上周的数据
  SELECT * FROM `article` WHERE YEARWEEK(date_format(`add_time`,'%Y-%m-%d')) = YEARWEEK(now())-1;
  7、查询截止到当前本月
  SELECT * FROM `article` WHERE date_format(`add_time`, '%Y%m') = date_format(curdate() , '%Y%m');
  8、查询上一月
  SELECT * FROM `article` WHERE period_diff(date_format(now() , '%Y%m') , date_format(`add_time`, '%Y%m')) =1;
  PHP程序员雷雪松的独立博客:.
  标签:
  来源:
欢迎举报抄袭、转载、暴力色情及含有欺诈和虚假信息的不良文章。
请先登录再操作
请先登录再操作
微信扫一扫分享至朋友圈
搜狐公众平台官方账号
生活时尚&搭配博主 /生活时尚自媒体 /时尚类书籍作者
搜狐网教育频道官方账号
全球最大华文占星网站-专业研究星座命理及测算服务机构
雷雪松是一个资深的PHP程序员,参与多个大型PHP项目开发...
主演:黄晓明/陈乔恩/乔任梁/谢君豪/吕佳容/戚迹
主演:陈晓/陈妍希/张馨予/杨明娜/毛晓彤/孙耀琦
主演:陈键锋/李依晓/张迪/郑亦桐/张明明/何彦霓
主演:尚格?云顿/乔?弗拉尼甘/Bianca Bree
主演:艾斯?库珀/ 查宁?塔图姆/ 乔纳?希尔
baby14岁写真曝光
李冰冰向成龙撒娇争宠
李湘遭闺蜜曝光旧爱
美女模特教老板走秀
曝搬砖男神奇葩择偶观
柳岩被迫成赚钱工具
大屁小P虐心恋
匆匆那年大结局
乔杉遭粉丝骚扰
男闺蜜的尴尬初夜
客服热线:86-10-
客服邮箱:mysql sql语句 两张表查询(a最新记录时间 查询b最新值) - ITeye问答
总体描述:根据交易记录表中的交易记录,得到汇率表中该交易记录时间后的第一条最新汇率
交易记录表 (sale_log):
&&& 主键&&&&& 币种&&&& 兑换金额&&&&& 交易时间&&&&&&& 交易日期
&&&&&&&&&&&& 1&&&&& USD&&&&& 100&&&&&&& 10:08:23&&&
&&&&&&&&&& 2&&&&& EUR&&&&&& 50&&&&&&& 10:10:01&&&
&&&&&&&&&& 3&&&&& USD&&&&&& 10&&&&&&& 20:21:19&&&
&&&&&&&&&& 4&&&&& USD&&&&& 100&&&&&&& 22:01:06&&&
&&&&&&&&&& 5&&&&& USD&&&&&& 20&&&&&&& 01:23:46&&&
&&&&&&&&&& 6&&&&& EUR&&&&&& 10&&&&&&& 12:07:06&&&
币种汇率表(rate):同一币种一天可能存在多个汇率,需要精确到秒
&&&& 币种&&&&&&&&&& 录入时间&&&&&&&&&&&&&&&&&&&&&&&&&&&& 汇率值&&
&&&&&&&&&& USD&&&&
08:00:05&&&&&&&&&&&&&&&& 6.8315
&&&&&&&&& USD&&&&
20:10:05&&&&&&&&&&&&&&&& 6.8310
&&&&&&&&& EUR&&&&
08:00:05&&&&&&&&&&&&&&& 10.1261
&&&&&&&&& USD&&&&
08:00:05&&&&&&&&&&&&&&&& 6.8286
&&&&&&&&& EUR&&&&
08:10:55&&&&&&&&&&&&&&& 10.1207
&&&&&&&&& USD&&&&
22:07:00&&&&&&&&&&&&&&&& 6.7789
&&&&&&&&& EUR&&&&
18:20:35&&&&&&&&&&&&&&& 10.1211&&&&&&&&&&
需要的结果是:以记录表为准,得到每条记录的汇率(得到& &=& 每条记录产生的时间 的第一条汇率)
表展现为:
&&& 主键&&&&& 币种&&&& 兑换金额&&&&& 交易时间&&&&&&& 交易日期&&&&&& 记录后最新汇率
&&&&&&&&&&&& 1&&&&& USD&&&&& 100&&&&&&& 10:08:23&&& &&&&&& 6.8310
&&&&&&&&&& 2&&&&& EUR&&&&&& 50&&&&&&& 10:10:01&&& &&&&& 10.1207
&&&&&&&&&& 3&&&&& USD&&&&&& 10&&&&&&& 20:21:19&&& &&&&&& 6.8286
&&&&&&&&&& 4&&&&& USD&&&&& 100&&&&&&& 22:01:06&&& &&&&&& 6.8286
&&&&&&&&&& 5&&&&& USD&&&&&& 20&&&&&&& 01:23:46&&& &&&&&& 6.8286
&&&&&&&&&& 6&&&&& EUR&&&&&& 10&&&&&&& 12:07:06&&& &&&&& 10.1211
问题补充:missoasis 写道交易时间,交易日期 ,录入时间 字段类型是什么?什么数据库?oracle?
交易时间---varchar
交易日期---date
录入时间---datetime
mysql数据库
问题补充:missoasis 写道我自己建的表,测试完全正确
你好,可以把你建表的SQL语句+ 运行的SQL语句发给我吗? 谢谢了
问题补充:missoasis 写道没问题记得给分,有问题再说
#
# Table structure for table a
#
DROP TABLE IF EXISTS `a`;
CREATE TABLE `a` (
& `id` int(11) NOT NULL,
& `bizhong` varchar(255) default NULL,
& `duihuan` int(11) default NULL,
& `shijian` varchar(255) NOT NULL,
& `riqi` date NOT NULL,
& PRIMARY KEY& (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=
#
# Dumping data for table a
#
/*!40101 SET NAMES gbk */;
INSERT INTO `a` VALUES (1,'1',100,'10:49:32','');
INSERT INTO `a` VALUES (2,'2',50,'11:55:19','');
INSERT INTO `a` VALUES (3,'2',100,'15:33:18','');
INSERT INTO `a` VALUES (4,'3',100,'20:12:09','');
DROP TABLE IF EXISTS `b`;
CREATE TABLE `b` (
& `id` int(11) NOT NULL auto_increment,
& `bizhong2` varchar(30) default NULL,
& `lurushijian` datetime NOT NULL,
& `huilv` double(12,2) default NULL,
& PRIMARY KEY& (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=
#
# Dumping data for table b
#
/*!40101 SET NAMES gbk */;
INSERT INTO `b` VALUES (1,'1',' 10:49:31',7.68);
INSERT INTO `b` VALUES (2,'2',' 10:49:33',11.56);
INSERT INTO `b` VALUES (3,'1',' 12:49:31',7.66);
INSERT INTO `b` VALUES (4,'1',' 22:49:31',7.61);
INSERT INTO `b` VALUES (5,'2',' 08:01:00',11.32);
INSERT INTO `b` VALUES (6,'3',' 21:01:01',123);
INSERT INTO `b` VALUES (7,'2',' 21:01:00',11.07);
INSERT INTO `b` VALUES (8,'2',' 20:00:07',11.44);
这是我的数据,测试时发现币种1的结果是取的正确的,但是币种2的汇率应该取 (2,'2',' 10:49:33',11.56);这条数据,却取的是15号的数据了,希望楼主能再帮忙看下,就差一点点了,再次谢谢了
问题补充:INSERT INTO `b` VALUES (2,'2',' 10:49:33',11.56);
11.56插入的时间是在交易后,而且是交易后的时间第一个,应该取这个数据,而不应该取
INSERT INTO `b` VALUES (8,'2',' 20:00:07',11.44);
这两个数据都是交易后的汇率,而且11.56比这条早
问题补充:missoasis 写道引用你交易时间是10:49:33,也就是说你插入在未交易前就插入了11.56这条数据说错了,你插入b的时间是10:49:33
之前的数据测试是对的,但是我后来调试的时候,把
INSERT INTO `a` VALUES (2,'2',50,'11:55:19','');
改为
INSERT INTO `a` VALUES (2,'2',50,'09:55:19','');
后,这条记录的汇率应该取'09:55:19'后的汇率对吧,也就是
INSERT INTO `b` VALUES (2,'2',' 10:49:33',11.56);
但是还是取的
INSERT INTO `b` VALUES (8,'2',' 20:00:07',11.44);
问题补充:missoasis 写道不好意思,有点麻烦了,又嵌套一层行了
select x.id , x.bizhong, x.duihuan, x.shijian, x.riqi, x.huilv from(select a.*,b.id as id2,b.bizhong2,b.huilv,b.lurushijian ,(replace(replace(replace(b.lurushijian,'-',''),':',''),' ','')-replace(replace(concat(a.riqi,a.shijian),'-',''),':','')) as cha
FROM
a
inner join b ON a.bizhong=b.bizhong2
where (replace(replace(replace(b.lurushijian,'-',''),':',''),' ','')-replace(replace(concat(a.riqi,a.shijian),'-',''),':',''))&0
order by a.id) x inner join (select id as id3 ,min(cha) as cha3 from(select a.*,b.id as id2,b.bizhong2,b.huilv,b.lurushijian ,(replace(replace(replace(b.lurushijian,'-',''),':',''),' ','')-replace(replace(concat(a.riqi,a.shijian),'-',''),':','')) as cha
FROM
a
left join b ON a.bizhong=b.bizhong2
where (replace(replace(replace(b.lurushijian,'-',''),':',''),' ','')-replace(replace(concat(a.riqi,a.shijian),'-',''),':',''))&0
order by a.id) c group by id) y on x.id=y.id3 and x.cha=y.cha3
天哪,我已经简化数据库表了,刚才的交易表已经是虚拟出来的中间表了(涉及3张表的查询),
如果拼SQL语句的话,再加上这。。。,真的没有其他办法了吗?
我已经被这问题困扰三天了,再整不出我估计要疯了
问题补充:missoasis 写道引用天哪,我已经简化数据库表了,刚才的交易表已经是虚拟出来的中间表了(涉及3张表的查询),
如果拼SQL语句的话,再加上这。。。,真的没有其他办法了吗?
我已经被这问题困扰三天了,再整不出我估计要疯了
要么写存数过程,要么程序里控制,一般不会直接这样处理的
做的是报表,17种币种,不能程序控制,要不访问数据库次数会成倍增加,存储过程不能用,只能自己拼接SQL
问题补充:missoasis 写道干嘛不给三张表,给两张表不一定就方便,老自己查自己多麻烦
现在方便的话我们在QQ中聊好吗
问题补充:xiaohuxiaoyu 写道不是只有两张表得吗,怎么又多出一张
另外张表是币种转换表,跟交易记录没关系,只起翻译币种,所以我就没列
采纳的答案
不好意思,有点麻烦了,又嵌套一层行了
select x.id , x.bizhong, x.duihuan, x.shijian, x.riqi, x.huilv from(select a.*,b.id as id2,b.bizhong2,b.huilv,b.lurushijian ,(replace(replace(replace(b.lurushijian,'-',''),':',''),' ','')-replace(replace(concat(a.riqi,a.shijian),'-',''),':','')) as cha
FROM
a
inner join b ON a.bizhong=b.bizhong2
where (replace(replace(replace(b.lurushijian,'-',''),':',''),' ','')-replace(replace(concat(a.riqi,a.shijian),'-',''),':',''))&0
order by a.id) x inner join (select id as id3 ,min(cha) as cha3 from(select a.*,b.id as id2,b.bizhong2,b.huilv,b.lurushijian ,(replace(replace(replace(b.lurushijian,'-',''),':',''),' ','')-replace(replace(concat(a.riqi,a.shijian),'-',''),':','')) as cha
FROM
a
left join b ON a.bizhong=b.bizhong2
where (replace(replace(replace(b.lurushijian,'-',''),':',''),' ','')-replace(replace(concat(a.riqi,a.shijian),'-',''),':',''))&0
order by a.id) c group by id) y on x.id=y.id3 and x.cha=y.cha3
select * ,(select 汇率值 from rate r where r.币种=s.币种 order by 汇率值 desc limit(0, 1)) from sale_
不是只有两张表得吗,怎么又多出一张
干嘛不给三张表,给两张表不一定就方便,老自己查自己多麻烦
引用天哪,我已经简化数据库表了,刚才的交易表已经是虚拟出来的中间表了(涉及3张表的查询),
如果拼SQL语句的话,再加上这。。。,真的没有其他办法了吗?
我已经被这问题困扰三天了,再整不出我估计要疯了
要么写存数过程,要么程序里控制,一般不会直接这样处理的
用我的数据自己测试一下,我只测试了一个
CREATE TABLE `rate` (
&& `bz` varchar(20) NOT NULL,
&& `lrsj` datetime NOT NULL,
&& `hlz` float NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE TABLE `sale_log` (
&& `id` int(5) NOT NULL auto_increment,
&& `jysj` time default NULL,
&& `bz` varchar(20) default NULL,
&& `je` float default NULL,
&& `jyrq` date default NULL,
&& PRIMARY KEY& (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
你试一下:
SELECT s.bz,s.jysj,s.jyrq,s.je,r.hlz FROM rate r,(SELECT bz,jysj,jyrq,CONCAT(jyrq,' ',jysj) s_jytime,je FROM sale_log) s
WHERE s.s_jytime&(SELECT MAX(r.lrsj) lrsj FROM rate r,(SELECT bz,jysj,jyrq,CONCAT(jyrq,' ',jysj) s_jytime,je FROM sale_log) s
WHERE s.s_jytime&r.lrsj) AND r.bz=s.
引用你交易时间是10:49:33,也就是说你插入在未交易前就插入了11.56这条数据说错了,你插入b的时间是10:49:33
引用11.56插入的时间是在交易后,而且是交易后的时间第一个,应该取这个数据,而不应该取
INSERT INTO `b` VALUES (8,'2',' 20:00:07',11.44);
这两个数据都是交易后的汇率,而且11.56比这条早
我靠,你币种为2的这条数据交易时间是11:55:19,如下:
引用INSERT INTO `a` VALUES (2,'2',50,'11:55:19','');
你交易时间是10:49:33,也就是说你插入在未交易前就插入了11.56这条数据
select *, max(h.dt)& from (select id,rate.Currency,exchange, date,time, value,datetime as dt from rate right join sale_log on rate.currency=sale_log.currency and concat(date,' ',time) &rate.`DateTime`) as h group by id
我这个可以,至少我能得到你需要的结果,不过选出来的列较多,你需要自己剔出一下。
引用INSERT INTO `b` VALUES (2,'2',' 10:49:33',11.56); 引用INSERT INTO `b` VALUES (8,'2',' 20:00:07',11.44); 引用INSERT INTO `a` VALUES (2,'2',50,'11:55:19','');
我运行取得时11.44这条数据,不是15号的,另外交易后的数据,明显不能是11.56这条数据,这条数据在交易前插入的,难道我发错了语句?
select id ,bizhong,duihuan,shijian,riqi,huilv,min(cha) from(select a.*,b.id as id2,b.bizhong2,b.huilv,b.lurushijian ,(replace(replace(replace(b.lurushijian,'-',''),':',''),' ','')-replace(replace(concat(a.riqi,a.shijian),'-',''),':','')) as cha
FROM
a
left join b ON a.bizhong=b.bizhong2
where (replace(replace(replace(b.lurushijian,'-',''),':',''),' ','')-replace(replace(concat(a.riqi,a.shijian),'-',''),':',''))&0
order by a.id) c group by id
没问题记得给分,有问题再说
CREATE TABLE `a` (
& `id` int(11) NOT NULL,
& `bizhong` varchar(255) default NULL,
& `duihuan` double default NULL,
& `shijian` varchar(255) NOT NULL,
& `riqi` date NOT NULL,
& PRIMARY KEY& (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=
相当于你的交易记录表
CREATE TABLE `b` (
& `id` int(11) NOT NULL auto_increment,
& `bizhong2` varchar(30) default NULL,
& `lurushijian` datetime NOT NULL,
& `huilv` double NOT NULL,
& PRIMARY KEY& (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=
相当于你的币种汇率表
数据是你的数据,执行的是下面的语句
select id ,bizhong,duihuan,shijian,riqi,huilv,min(cha) from(select a.*,b.id as
id2,b.bizhong2,b.huilv,b.lurushijian ,(replace(replace(replace
(b.lurushijian,'-',''),':',''),' ','')-replace(replace(concat
(a.riqi,a.shijian),'-',''),':','')) as cha
left join b b ON a.bizhong=b.bizhong2
where (replace(replace(replace(b.lurushijian,'-',''),':',''),' ','')-replace(replace
(concat(a.riqi,a.shijian),'-',''),':',''))&0
order by a.id) c group by id
我自己建的表,测试完全正确
看看下面这个,找个你的表的字段改改
select id ,bizhong,duihuan,shijian,riqi,huilv,min(cha) from(select a.*,b.id as
id2,b.bizhong2,b.huilv,b.lurushijian ,(replace(replace(replace
(b.lurushijian,'-',''),':',''),' ','')-replace(replace(concat
(a.riqi,a.shijian),'-',''),':','')) as cha
FROM
sale_log a
left join rate b ON a.bizhong=b.bizhong2
where (replace(replace(replace(b.lurushijian,'-',''),':',''),' ','')-replace(replace
(concat(a.riqi,a.shijian),'-',''),':',''))&0
order by a.id) c group by id
交易时间,交易日期 ,录入时间 字段类型是什么?什么数据库?oracle?
已解决问题
未解决问题

我要回帖

更多关于 mysql创建表的sql语句 的文章

 

随机推荐