sql server中如何查找一天内固定时间段内某个字段对应的记录条数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server中如何查找一天内固定时间段内某个字段对应的记录条数?相关的知识,希望对你有一定的参考价值。

sql server中如何查找一天内固定时间段内某个字段对应的记录条数?
表如下:我想求在6:00到7:00,7:00到8:00(以此类推,间隔1小时)……的STATIONNO字段的记录条数,怎么求呢?跪求大神指导!!!

参考技术A select DATEPART(hour,consumetime) ,count(*) from 表 where consumetime >'XXX' and consumetime <'XXX' group by DATEPART(hour,consumetime)追问

能不能设定成固定的时间间隔,例如一小时,把各个时间段内对应的都统计出来,而不手动输入consumetime >'XXX' and consumetime <'XXX'呢?谢谢啦!

追答

这个不就是按小时统计了吗,你要查全部的话那就再加一个日期(convert(varchar(12) , getdate(), 23 ))分组就可以

追问

运行出来这样,这是什么啊?

我想要的效果是这样的,

时间                 stationno     统计出来的

6:00-7:00      1                        3

6:00-7:00         2                         5


……

怎么弄呢?跪求大神指导!!!

追答

select convert(varchar(10),DATEPART(hour,consumetime)) + ':00-' +convert(varchar(10),DATEPART(hour,consumetime)+1) + ':00'
) as 时间, stationno ,count(*) as 统计出来的 from 表 where consumetime >'XXX' and consumetime <'XXX' group by
convert(varchar(10),DATEPART(hour,consumetime)) + ':00-' +convert(varchar(10),DATEPART(hour,consumetime)+1) + ':00'
) , stationno

本回答被提问者采纳
参考技术B 你说的对应的记录条数,就是STATIONNO的值吗?
就是求那个时间段所以的记录总和吗?

select Sum(STATIONNO) '总记录' from tableName where (时间字段名) BETWEEN '开始时间' AND ‘结束时间’
这样就可以追问

能不能设定成固定的时间间隔,例如一小时,把各个时间段内对应的都统计出来,而不手动输入consumetime >'XXX' and consumetime <'XXX'呢?谢谢啦!

在 SQL Server Reporting Services (VB.Net) 中查找上一个日历月的第一天和最后一天

【中文标题】在 SQL Server Reporting Services (VB.Net) 中查找上一个日历月的第一天和最后一天【英文标题】:Find first and last day for previous calendar month in SQL Server Reporting Services (VB.Net) 【发布时间】:2011-01-04 19:44:51 【问题描述】:

我正在 MS SQL Server Reporting Services 中创建报告,需要将默认的开始和结束日期报告参数设置为上一个日历月的第一个和最后一个日期,需要帮助。

报告在每月的第二个日历日生成,我需要以下值:

上一个日历月 - 第一天 - 最后一天

我一直在使用 DateAdd,但未能成功创建表达式(在 VB.NET 中,据我了解)。如果您能给我任何帮助,我将不胜感激!

【问题讨论】:

【参考方案1】:

这些功能对我很有帮助——尤其是在设置订阅报告方面;但是,我注意到在使用上面发布的当月最后一天功能时,只要下一个月的天数与当月相同,它就可以工作。我已经完成并测试了这些修改,并希望它们将来能帮助其他开发人员:

日期公式: 查找上个月的第一天:

DateAdd("m", -1, DateSerial(Year(Today()), Month(Today()), 1))

查找上个月的最后一天:

DateSerial(Year(Today()), Month(Today()), 0)

查找当月的第一天:

DateSerial(Year(Today()),Month(Today()),1)

查找当前月份的最后一天:

DateSerial(Year(Today()),Month(DateAdd("m", 1, Today())),0)

【讨论】:

【参考方案2】:

这个不会给你约会的时间:

=FormatDateTime(DateAdd("m", -1, DateSerial(Year(Today()), Month(Today()), 1)), 
DateFormat.ShortDate)

这个会给你日期时间:

=dateadd("m",-1,dateserial(year(Today),month(Today),1)) 

【讨论】:

【参考方案3】:

Randall,以下是我发现在 s-s-rS 中工作的 VB 表达式,用于获取任何月份的第一天和最后一天,使用当前月份作为参考:

上个月的第一天:

=dateadd("m",-1,dateserial(year(Today),month(Today),1)) 

本月的第一天:

=dateadd("m",0,dateserial(year(Today),month(Today),1)) 

下个月的第一天:

=dateadd("m",1,dateserial(year(Today),month(Today),1)) 

上个月的最后一天:

=dateadd("m",0,dateserial(year(Today),month(Today),0))

本月的最后一天:

=dateadd("m",1,dateserial(year(Today),month(Today),0))

下个月的最后一天:

=dateadd("m",2,dateserial(year(Today),month(Today),0))

MSDN documentation for the VisualBasic DateSerial(year,month,day) function 说明该函数接受 yearmonthday 参数的预期范围之外的值。这允许您指定有用的日期相关值。例如,Day 的值为 0 表示“上个月的最后一天”。这是有道理的:那是当月第 1 天的前一天。

【讨论】:

本月最后一天和下个月最后一天不正确;两者都假设未来几个月的天数与前一个月相同。有关在 s-s-rS 表达式中执行此操作的更好方法,请参阅@Stephanie Grice 的答案。【参考方案4】:

我一直在寻找一个简单的答案来自己解决这个问题。这是我发现的

这将年月分开,休息一个月,得到第一天。

firstDayInPreviousMonth = DateSerial(Year(dtmDate), Month(dtmDate) - 1, 1)

从当前获取上个月的第一天

lastDayInPreviousMonth = DateSerial(Year(dtmDate), Month(dtmDate), 0)

更多详情请见: http://msdn.microsoft.com/en-us/library/aa227522%28v=vs.60%29.aspx

【讨论】:

【参考方案5】:

我在将实际 VB.NET 转换为 s-s-rS 使用的表达式子集时遇到了一些困难。不过,你确实启发了我,这就是我想出的。

StartDate  
=dateadd("d",0,dateserial(year(dateadd("d",-1,dateserial(year(Today),month(Today),1))),month(dateadd("d",-1,dateserial(year(Today),month(Today),1))),1))

End Date
=dateadd("d",0,dateserial(year(Today),month(Today),1))  

我知道 StartDate (上个月的第一天)有点递归。我在这里有什么遗漏吗?这些是严格的日期字段(即没有时间),但我认为这应该捕获闰年等。

我是怎么做到的?

【讨论】:

【参考方案6】:
        Dim aDate As DateTime = #3/1/2008# 'sample date
    Dim StartDate As DateTime = aDate.AddMonths(-1).AddDays(-(aDate.Day - 1))
    Dim EndDate As DateTime = StartDate.AddDays(DateTime.DaysInMonth(StartDate.Year, StartDate.Month) - 1)

    'to access just the date portion
    ' StartDate.Date
    ' EndDate.Date

【讨论】:

【参考方案7】:

我不熟悉 s-s-rS,但是你可以在 VB.Net 中使用DateTime 构造函数获取上个月的开始和结束,如下所示:

Dim prevMonth As DateTime = yourDate.AddMonths(-1)

Dim prevMonthStart As New DateTime(prevMonth.Year, prevMonth.Month, 1)
Dim prevMonthEnd As New DateTime(prevMonth.Year, prevMonth.Month, DateTime.DaysInMonth(prevMonth.Year, prevMonth.Month))

yourDate 可以是任何DateTime 对象,例如DateTime.Today#12/23/2003#

【讨论】:

【参考方案8】:
Dim thisMonth As New DateTime(DateTime.Today.Year, DateTime.Today.Month, 1)
Dim firstDayLastMonth As DateTime
Dim lastDayLastMonth As DateTime

firstDayLastMonth = thisMonth.AddMonths(-1)
lastDayLastMonth = thisMonth.AddDays(-1)

【讨论】:

+1 用于将“参考日期”存储在变量中,这消除了计算第一天和最后一天之间存在一个月偏移的(不太可能,但可能)情况。 我在生产中没有看到过这种情况,但正是由于这个原因,我看到了一个损坏的计划构建。 :)【参考方案9】:

在 C# 中:

new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(-1)
new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddDays(-1)

【讨论】:

您可以将new 更改为New 并称之为VB.NET

以上是关于sql server中如何查找一天内固定时间段内某个字段对应的记录条数?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server如何查找季度、半年和当年的最后一天?

如何通过数据库查找一天内最少使用的时间段

如何在一年多的时间内找到一天内订单超过 1 个的客户

在 SQL Server Reporting Services (VB.Net) 中查找上一个日历月的第一天和最后一天

sql查询一天内的where写法,sql写法

如何在 SQL SERVER 2017 SSMS 中用以前保存的行值替换行值