sqlserver数据库如何每时/每天/每月/每年任取一条数据

原创 2016年08月30日 19:35:32

    最近用sqlserver+.NET做一个项目,需求是要用图表来显示数据,而且是每时/每天/每月/每年任取一条数据,即如果用户选择时间的区域是同一天,那么按区域的每小时取一条记录,如果区间是一个月,那么每天任取一条数据,如果区间是一年,每个月任取一条数据。。。。。

   开始根本毫无头绪,甚至是想用很暴力的方式解决(多写几条sql语句),最后在别人提供的小demo里面发现了解决方法。

   闲话不说,看sql语句:

   select * 

       from tempview a 

   where not exists(

       select 1 

             from tempview 

      where convert(varchar(13),receiveTime,120)=convert(varchar(13),a.receiveTime,120) and receiveTime>a.receiveTime

     );

   先解释下convert函数:convert函数是用来格式化日期的方法(还有其他用处,自查)。第一个参数很明显是最后返回的数据类型及类型长度(重要),第二个就是要格式化的对象,第三个就是要化成的格式值,如:这里的120 代表的是:yyyy-mm-dd hh:mi:ss(24h)。

  具体的每个参数代表什么含义,可以访问w3c:       http://www.w3school.com.cn/sql/func_convert.asp

   为什么第一个参数加了个重要呢,因为类型长度的变化,将是解决问题的核心。

    每月:  看一下要化成的格式:yyyy-mm-dd hh:mi:ss   当receiveTime只有年份相同时,我们就能够通过比较月份是否相同来选取月份。这时将长度限制到yyyy(4)就能达到效果:所以SQL语句将变为这样:

select * 

       from tempview a 

   where not exists(

       select 1 

             from tempview 

      where convert(varchar(4),receiveTime,120)=convert(varchar(4),a.receiveTime,120) and receiveTime>a.receiveTime

     );

 那么同理可得:

  每月:yyyy-mm  varchar(7);

  每日:yyyy-mm-dd  varchar(10);

  每日:yyyy-mm-dd  hh   varchar(13);

   PS:注意应该要先把用户选择范围内的数据先筛选出来,然后再基于这些数据选择,所以上面的SQL语句用的是视图。

   注意:上面的SQL语句不算随机取,因为他始终取满足条件的最后一条数据。

数据库专题——SQL语句统计每天、每月、每年的数据

SQL语句统计每天、每月、每年的数据 1、每年 select year(ordertime) 年, sum(Total) 销售合计 from 订单表 group by...
  • zouxiang2188
  • zouxiang2188
  • 2014年08月21日 10:55
  • 7822

group by 取最新或者最后的一条数据

参考:http://blog.csdn.net/hfsaini/article/details/6675451 或者 SELECT aud.auditingState, aud.auditingInf...
  • m18500961204
  • m18500961204
  • 2017年09月26日 10:47
  • 1111

SQL如何获得本季度第一天、一年的第一天、本月的最后一天

nterval 参数,具有以下设定值:   设置 描述   Year yy, yyyy 年   quarter qq, q 季   Month mm, m 月   dayofyear dy,...
  • weizhiai12
  • weizhiai12
  • 2014年01月02日 17:01
  • 5405

sqlserver获取一段时间内每一天每一小时的数据

sqlserver获取一段时间内每一天每一小时的数据
  • lrx2011
  • lrx2011
  • 2017年06月15日 15:23
  • 937

mysql取每个小时的一条数据

去指定时间范围内,每个小时的一条数据 SELECT * FROM (SELECT * FROM test.c0a801adrange201404 where time > 1397050237 an...
  • linxing927
  • linxing927
  • 2014年04月11日 16:10
  • 835

SQL Server获取当月天数,当月第一天,当月最后一天,本年最后一天,当月第一个星期

 SQL Server上的日期获取与Oracle确实有些不同,现将日期获取的方法说明如下: 以下getdate()为获取当天的日期,按照实际需求,可以替换成参数或实际的日期 ...
  • langcai1981
  • langcai1981
  • 2014年02月27日 13:39
  • 18380

sqlserver数据库如何每时/每天/每月/每年任取一条数据

sqlserver数据库如何每时/每天/每月/每年任取一条数据
  • ever_idea
  • ever_idea
  • 2016年08月30日 19:35
  • 1147

SQL语句:按时间查询最新的一条数据

select * from( select * from lz_global_result t order by t.time desc ) a where rownum 高效率的哦。...
  • enterys
  • enterys
  • 2012年10月24日 10:45
  • 12548

mysql查询每天每周每月每年的数据方法

mysql日期函数与自定义变量使用或查询方法
  • h363659487
  • h363659487
  • 2017年07月05日 15:56
  • 3251

一个sql题目, 统计每年每月的信息

1 题目描述 2 建表和插入数据 CREATE TABLE sales( id INT AUTO_INCREMENT PRIMARY KEY, YEAR VARCHAR(10)...
  • jianfpeng241241
  • jianfpeng241241
  • 2015年11月16日 12:43
  • 1174
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sqlserver数据库如何每时/每天/每月/每年任取一条数据
举报原因:
原因补充:

(最多只允许输入30个字)