【问题标题】:How to get the average time per second from a date column in SQL?如何从 SQL 中的日期列中获取平均每秒时间?
【发布时间】:2021-11-10 20:38:16
【问题描述】:

我有一个名为 OrderDate 的日期列,用于跟踪插入时间。

看起来像这样:

我需要能够使用这个OrderDate 列并获得每秒的平均插入次数。例如,每分钟发生 3 次插入。

如何使用 datetime 列并创建一个 SQL 查询来确定每分钟的平均插入次数?

我已经尝试汇总,但这并没有给我我需要的东西。

SELECT      
    YEAR(orderdate)  AS YEAR,
    MONTH(orderdate) AS MONTH,
    DAY(orderdate)   AS DAY,
    DATEPART(hour, orderdate)   AS HOUR,
    DATEPART(MINUTE, orderdate) AS MINUTE,
    DATEPART(SECOND, orderdate) AS SECOND
FROM 
    Sales.Orders
GROUP BY 
    ROLLUP (YEAR(orderdate), MONTH(orderdate), DAY(orderdate), 
            DATEPART(HOUR, orderdate),
            DATEPART(MINUTE, orderdate),
            DATEPART(SECOND, orderdate))   

【问题讨论】:

  • 看起来每分钟 3 次插入(不是每秒)。是这个意思吗?
  • 您的示例数据显示每秒插入 0.05 次。
  • 是的,这是正确的@MichaelBruesch,我的意思是每分钟。我需要这些结果。

标签: sql-server tsql ssms-2017


【解决方案1】:

使用 lag 获取之前的 insertdatetime 和 datepart 获取第二个间隔

declare @temp as table(AccountNumber int, InsertDateTime datetime)

insert into @temp values(59000,'11/1/2021 1:00:01');
insert into @temp values(59000,'11/1/2021 1:00:03');
insert into @temp values(59000,'11/1/2021 1:00:35');
insert into @temp values(59000,'11/1/2021 1:01:03');
insert into @temp values(59000,'11/1/2021 1:01:04');
insert into @temp values(59000,'11/1/2021 1:01:05');
insert into @temp values(59000,'11/1/2021 1:01:06');

with cte
as
(
  select PriorInsertDateTime,
  InsertDateTime,
  IsNull(DateDiff(second,PriorInsertDateTime,InsertDateTime),0) Duration
  from
  (
  select 
  lag(InsertDateTime,1) over(partition by AccountNumber order by InsertDateTime) 
   PriorInsertDateTime,
   InsertDateTime
   from @temp
   )x
)
select avg(Duration) avg_seconds from cte

输出

9 seconds

秒持续时间 0,2,32,28,1,1,1,1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多