使用t-sql根据其他表中的日期查找值

希万

我面临以下挑战。我有2张桌子。第一个表包含特定时间(即价格目录)自行车的价值变化。这意味着某个产品的某个价格有效,直到该表中有一个新价格。

Product |   RowNr | Year |  Month | Value
------------------------------------------
Bike1   |    1    | 2009 |    8   |  100
Bike1   |    2    | 2010 |    2   |  400
Bike1   |    3    | 2011 |    4   |  300
Bike1   |    4    | 2012 |    9   |  100
Bike1   |    5    | 2013 |    2   |  500
Bike1   |    6    | 2013 |    5   |  200
Bike2   |    1    | 2013 |    1   | 5000
Bike2   |    2    | 2013 |    2   | 4000
Bike2   |    3    | 2014 |    6   | 2000
Bike2   |    4    | 2014 |   10   | 4000

第二个表包含我要确定自行车价值的日期(基于表1中的信息)。

Product | Date       | Value
-------------------------
Bike1   |  3/01/2008 |  ?
Bike1   | 04/30/2011 |  ?
Bike1   |  5/08/2009 |  ?
Bike1   | 10/10/2012 |  ?
Bike1   |  7/01/2014 |  ?

因此,第1行和第3行应获得值“ 400”,第2行“ 300”,第4行“ 100”和第5行“ 200”等。

有谁知道如何在T-SQL中实现?我已经对第一个表进行了分区,但是可以在后续步骤中使用一些建议。

非常感谢,

贝特科技

您可以执行类似的操作,该方法将使用小于或等于产品表日期的价格检索产品的最新价格目录值。

SELECT p.product
    , p.date
    , valueAsOfDate = 
    (   SELECT TOP 1 c.value
        FROM priceCatalogue c
        WHERE c.product = p.product
            AND convert(date, 
                    convert(varchar(4), c.year) + '-' 
                    + convert(varchar(2), c.month)  
                    + '-1' 
                ) <= p.date
        --this order by will ensure that the most recent price is used
        ORDER BY c.year desc, c.month desc 
    )
FROM product p

该表结构不是理想的……您最好在priceCatalogue表中使用“ AsOfDate”列,这样您就不必将priceCatalogue表中的值转换为日期来进行比较。如果这是新开发的,则将priceCatalogue表更改为具有asOfDate列(它是日期数据类型)。如果这是从另一个数据源填充的现有表,那么您可以考虑将持久化的计算列添加到表中。http://msdn.microsoft.com/en-us/library/ms188300.aspx

使用productCatalogue表上的asOfDate列,您可以使用索引来进行SARG支持的查询(是什么使SQL语句可存储?)。

SELECT p.product
    , p.date
    , valueAsOfDate = 
    (   SELECT TOP 1 c.value
        FROM priceCatalogue c
        WHERE c.product = p.product
            AND c.asOfDate <= p.date
        --this order by will ensure that the most recent price is used
        ORDER BY c.year desc, c.month desc 
    )
FROM product p

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用其他表中的值的总和更新sql表中的记录

来自分类Dev

如何根据其他表中的内容使用sql语句选择某些行

来自分类Dev

从其他SQL表中查找值

来自分类Dev

使用表作为队列在SQL Server 2017中根据条件查找以前的值

来自分类Dev

使用其他表中的多个值随机更新表

来自分类Dev

使用 SQL 中的其他表更新/插入表

来自分类Dev

如何使用其他表中的值进行计数

来自分类Dev

使用ngif else在表中显示其他值

来自分类Dev

使用其他表列中的任何值过滤表

来自分类Dev

其他表中的T-SQL插入列

来自分类Dev

T-SQL从其他日期分组的简单日期列表中总结日期范围

来自分类Dev

使用Match函数后从其他SQL表中删除?

来自分类Dev

使用PDO根据mySQL中其他两个表的结果从表中选择行

来自分类Dev

根据下拉列表选择,使用其他表中的数据填充空表

来自分类Dev

使用 Pandas 根据其他两列中的值替换列中的值

来自分类Dev

用查找表替换T-SQL的其他情况(用时)

来自分类Dev

根据表中的其他值填充SQL表列

来自分类Dev

使用最近的日期并删除其他SQL

来自分类Dev

熊猫使用其他列中的值创建新列,并根据列值进行选择

来自分类Dev

T-SQL CASE检查最早的日期,然后对照其他值

来自分类Dev

使用连接从其他表的值逐行更新 SQL Server 表

来自分类Dev

如何使用SQL从有效的日期表中查找没有数据的日期范围?

来自分类Dev

使用XSLT根据XML中的其他节点更改节点的值

来自分类Dev

使用mutate和min_rank根据其他两列中的值创建排名列

来自分类Dev

使用mutate()和cross()根据其他列中的值更改几列的值

来自分类Dev

如何使用javascript根据html中其他字段的值填充表单字段

来自分类Dev

使用 linq 根据其他列值检索行值

来自分类Dev

SQL:按日期时间字段分组,但仅将日期与查询中其他位置使用的日期一起使用

来自分类Dev

使用lodash在其他数组内的数组中查找值

Related 相关文章

  1. 1

    使用其他表中的值的总和更新sql表中的记录

  2. 2

    如何根据其他表中的内容使用sql语句选择某些行

  3. 3

    从其他SQL表中查找值

  4. 4

    使用表作为队列在SQL Server 2017中根据条件查找以前的值

  5. 5

    使用其他表中的多个值随机更新表

  6. 6

    使用 SQL 中的其他表更新/插入表

  7. 7

    如何使用其他表中的值进行计数

  8. 8

    使用ngif else在表中显示其他值

  9. 9

    使用其他表列中的任何值过滤表

  10. 10

    其他表中的T-SQL插入列

  11. 11

    T-SQL从其他日期分组的简单日期列表中总结日期范围

  12. 12

    使用Match函数后从其他SQL表中删除?

  13. 13

    使用PDO根据mySQL中其他两个表的结果从表中选择行

  14. 14

    根据下拉列表选择,使用其他表中的数据填充空表

  15. 15

    使用 Pandas 根据其他两列中的值替换列中的值

  16. 16

    用查找表替换T-SQL的其他情况(用时)

  17. 17

    根据表中的其他值填充SQL表列

  18. 18

    使用最近的日期并删除其他SQL

  19. 19

    熊猫使用其他列中的值创建新列,并根据列值进行选择

  20. 20

    T-SQL CASE检查最早的日期,然后对照其他值

  21. 21

    使用连接从其他表的值逐行更新 SQL Server 表

  22. 22

    如何使用SQL从有效的日期表中查找没有数据的日期范围?

  23. 23

    使用XSLT根据XML中的其他节点更改节点的值

  24. 24

    使用mutate和min_rank根据其他两列中的值创建排名列

  25. 25

    使用mutate()和cross()根据其他列中的值更改几列的值

  26. 26

    如何使用javascript根据html中其他字段的值填充表单字段

  27. 27

    使用 linq 根据其他列值检索行值

  28. 28

    SQL:按日期时间字段分组,但仅将日期与查询中其他位置使用的日期一起使用

  29. 29

    使用lodash在其他数组内的数组中查找值

热门标签

归档