如何过滤出与指定日期匹配的生效日期数据

数据源有一个产品价格表,每个价格都有相应的生效日期。现在想录入一个日期就能查询出当时生效的价格表,有什么好办法?
      比如A产品14年卖300,15年卖320,16年卖280,录入15年的日期,查询出的价格为320.
FineReporthally-gm 发布于 2016-12-1 15:46
悬赏:2 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共8回答
最佳回答
0
轩辕小珂发布于2016-12-1 15:46(编辑于 2023-9-6 09:34)
555
最佳回答
0
wiseM__花生丶发布于2016-12-1 15:58(编辑于 2023-9-6 09:34)
555
最佳回答
0
gqmao发布于2016-12-1 16:00(编辑于 2023-9-6 09:34)
555
最佳回答
0
hally-gm发布于2016-12-1 16:06(编辑于 2023-9-6 09:34)
555
  • 轩辕小珂 轩辕小珂

    数据源本身的设计有问题。如果是设置生效的起止日期就容易了。
    建议设法修改下数据库。或者自己弄个视图,加上起止日期。然后直接调用视图来查询。
    简单的弄个示例 。
    FR这边的数据集,就是select up_ from 视图 where 查询日期>=datefm_  and 查询日期<dateto_

    1. <P>
    2. <P>drop table #up</P>
    3. <P>select \'a\' as part_,\'2016-01-01\' as date_,1 as up_
    4. into #up
    5. union
    6. select \'a\' as part_,\'2016-06-01\' as date_,2 as up_
    7. union
    8. select \'a\' as part_,\'2016-09-01\' as date_,3 as up_</P>
    9. <P>select * from  #up</P>
    10. <P>
    11. select part_,date_ as datefm_ ,(select isnull(MIN(date_),\'3000-01-01\') from #up where date_ >a.date_ and part_=A.part_) as dateto_,UP_
    12. from #up a</P></P>
    13. <P> </P>
    14. <P> </P>
    15. <P> </P>
    16. <P> </P>
    复制代码

    建议对源数据表增加一字段dateto_ ,然后利用触发器来更新这个字段。就不用做视图了,而且以后查询的速度也会快很多。


    回复
    2016-12-01 15:46 
最佳回答
0
静听禅鸣发布于2016-12-2 06:19(编辑于 2023-9-6 09:34)
555
最佳回答
0
迈达斯之手发布于2016-12-2 10:20(编辑于 2023-9-6 09:34)
555
最佳回答
0
爱学习的蛋蛋发布于2016-12-2 10:53(编辑于 2023-9-6 09:34)
555
  • 轩辕小珂 轩辕小珂

    最笨的办法就是取年,减一,然后字符拼接。
    select convert(date,convert(nvarchar(16),YEAR( GETDATE()) -1)+convert(nvarchar(16),\'-12\')+convert(nvarchar(16),\'-31\'))
    回复
    2016-12-02 11:01 
最佳回答
0
爱学习的蛋蛋发布于2016-12-2 10:54(编辑于 2023-9-6 09:34)
555
最佳回答
0
轩辕小珂发布于2016-12-2 11:01(编辑于 2023-9-6 09:34)
555
最佳回答
0
gqmao发布于2016-12-2 11:17(编辑于 2023-9-6 09:34)
555
  • 0关注人数
  • 853浏览人数
  • 最后回答于:2016-12-2 11:17
    活动推荐 更多
    热门课程 更多
    返回顶部