【问题标题】:How to find the difference between two dates ? Calculate the find the difference between two Counts?如何找到两个日期之间的差异?计算找到两个计数之间的差异?
【发布时间】:2018-03-16 07:19:20
【问题描述】:
DATE               Item              Count   
------------------------------------------
2018-03-15         Basketball        1000
2018-03-12         Basketball         950
2018-03-07         Basketball         900
2018-03-02         Basketball         850

上面的这些行属于表中的不同行位置,它们的排序方式类似于使用下面的查询和下面的查询在存储过程中。

我要做的是找到两个日期之间的计数差异数和天数差异

select Top 1  Date, Item, Count 
from SportsItemSells 
where @Item ='BasketBall' 
order by DATE desc   -- returns first row

select Date, ITEM, Count 
from SportsItemsSells 
where @Item =Item
order by DATE desc
      offset 1 rows 
      fetch next 1 row only;   -- returns second row

Select Date, ITEM, Count 
from SportsItemsSells 
where @Item =Item
order by DATE desc
      offset 2 rows 
      fetch next 1 row only;   -- returns third row

当我尝试计算存储过程中两个日期之间的天数差异时,它总是返回零

@DayDifferenceCalculation1 = DateDIFF( day,@Date,@Date)

我想要的是DateDiff(Day,@DateRow1,@DateRow2)但是如何为不同的日期和不同的行动态定义日期?

@CountDifferenceCalculation1 = @Count - @Count (

不管怎样,它总是返回零。

我想要的是

 @CountDifferenceCalculation1 = @Count1 - @Count2 )

但是所有这些计数都设置为@Count 和日期为@Date 如何以不同的方式为不同的行定义@Date@Count

任何帮助将不胜感激

enter image description here

【问题讨论】:

  • 如果您详细说明您在商店 proc 中尝试的内容,将会很有帮助。
  • 请添加源表数据和您想要的结果......这将有助于查看可能的方法。
  • 当我试图找出天差之间的差异时,它总是给我零,因为 DATEDIFF(day,@Date,@Date) 始终为零,但如果我们取差,我不希望它为零在第一行日期和第二行日期之间,它应该给我 3 天的差异
  • 在上表之间还有其他行用于棒球,足球,但我使用这些查询仅选择篮球......上表中的那些行可能在表中的任何位置,而不是一个之后另一个......所以我在商店过程中使用了那些选择查询......

标签: sql tsql stored-procedures sql-server-2012


【解决方案1】:

这是你需要的吗?

SELECT  Item,
        Date,
        LEAD(Date,1,null) OVER (ORDER BY Date) AS NextDate,
        DATEDIFF(day,[Date],LEAD(Date,1,null) OVER (ORDER BY Date)) AS DateDifference,
        Count,
        Count-LEAD(Count,1,null) OVER (ORDER BY Date) AS CountDifference

FROM #Temp1

结果会是

enter image description here

【讨论】:

  • 我实际上想从最近日期的表格顺序中选择四行....仅用于篮球销售.....第一行(最近日期),第四行是最早的日期.......第一行可能是实际销售表中的第 50 行,第四行可能是实际表中的第 100 行......我想要的是第一和第二个篮球销售计数之间的差异,天第一和第二,第一和第三,第一和第四之间的差异,所以我们将有销售计数和天数差异的值..我只想要这 3 个值
  • @Jr.Developer 您可以将您的预选放入cte 并针对此派生表使用此代码。
【解决方案2】:

试试下面的代码

WITH CTE_SportsItemSells AS
(
select  Date,Item,Count,ROW_NUMBER() OVER (ORDER BY Date DESC) Rn
from SportsItemSells 
WHERE Item='Basketball'
)
SELECT C.DATE AS MostRecentDate
,C2.Date AS NextDates 
,C.Item AS RecentCount
,C2.COUNT AS NextCounts
,DATEDIFF(DAY,C.Date,C2.Date) AS DateDifference
,C.Count-C2.Count AS 'CountDifference'
FROM CTE_SportsItemSells AS C
LEFT JOIN CTE_SportsItemSells AS C2 ON C.Rn<C2.Rn
WHERE C.Rn=1 AND C2.Rn<=4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2021-11-25
    • 2011-08-01
    相关资源
    最近更新 更多