【问题标题】:joining monthly values with daily values in sql在sql中将月值与日值连接起来
【发布时间】:2012-05-21 12:33:26
【问题描述】:

我在一张表中有每日值,在另一张表中有每月值。我需要使用每月表的值并每天计算它们。

基本上,每月系数 * 每日系数 -- 每天

谢谢!

我有一张这样的桌子:

2010-12-31 00:00:00.000 28.3
2010-09-30 00:00:00.000 64.1
2010-06-30 00:00:00.000 66.15
2010-03-31 00:00:00.000 12.54

还有这样一张桌子:

2010-12-31 00:00:00.000 98.1
2010-12-30 00:00:00.000 97.61
2010-12-29 00:00:00.000 99.03
2010-12-28 00:00:00.000 97.7
2010-12-27 00:00:00.000 96.87
2010-12-23 00:00:00.000 97.44
2010-12-22 00:00:00.000 97.76
2010-12-21 00:00:00.000 96.63
2010-12-20 00:00:00.000 95.47
2010-12-17 00:00:00.000 95.2
2010-12-16 00:00:00.000 94.84
2010-12-15 00:00:00.000 94.8
2010-12-14 00:00:00.000 94.1
2010-12-13 00:00:00.000 93.88
2010-12-10 00:00:00.000 93.04
2010-12-09 00:00:00.000 91.07
2010-12-08 00:00:00.000 90.89
2010-12-07 00:00:00.000 92.72
2010-12-06 00:00:00.000 93.05
2010-12-03 00:00:00.000 91.74
2010-12-02 00:00:00.000 90.74
2010-12-01 00:00:00.000 90.25

我需要获取该季度的价值,并将该季度的所有天数乘以每日价值

【问题讨论】:

  • 我看不出问题。你被困在哪里了?
  • 请添加架构、示例数据和所需结果。你试过什么?

标签: sql sql-server date join


【解决方案1】:

你可以试试:

SELECT dt.day, dt.factor*mt.factor AS daily_factor
FROM daily_table dt INNER JOIN month_table mt
    ON YEAR(dt.day) = YEAR(mt.day)
   AND FLOOR((MONTH(dt.day)-1)/3) = FLOOR((MONTH(mt.day)-1)/3)
ORDER BY dt.day

或(如@Andriy 建议的那样)

SELECT dt.day, dt.factor*mt.factor AS daily_factor
FROM daily_table dt INNER JOIN month_table mt
    ON YEAR(dt.day) = YEAR(mt.day)
   AND DATEPART(QUARTER, dt.day) = DATEPART(QUARTER, mt.day)
ORDER BY dt.day

【讨论】:

  • 为了更安全,您可能还应该将年份添加到架构中并加入
  • @paul:是的,谢谢...我根据 OP 架构和数据更改了整个答案
  • 理想情况下,DATEPART(QUARTER, dt.day) = DATEPART(QUARTER, mt.day) 应该和FLOOR((MONTH(dt.day)-1)/3) = FLOOR((MONTH(mt.day)-1)/3) 一样有效,甚至更好,因为要从一个月的数字中获取季度的数字,您需要删除后者4,而不是 3。 :)
  • @AndriyM:我编辑了我的答案,感谢您找到更好的解决方案。无论如何,我很确定我必须使用/3:想想从 7 月到 9 月的月份,它们是 7..9,-1 它们变成 6..8 和 /3+FLOOR 它总是 2,而使用 / 4 这不是....
  • 啊,对不起,这个错误确实是我的,而且也很愚蠢。
猜你喜欢
  • 2014-06-16
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多