加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

将每年可重复的值存储在MySQL数据库中

发布时间:2021-01-24 16:48:07 所属栏目:编程 来源:网络整理
导读:在已往的几天里,我一向将头撞在桌子上,因此,我转向Stack Overflow. 我正在行使的软件具偶然刻敏感数据.凡是的办理方案是见效和到期日期. EFF_DT XPIR_DT VALUE2000-05-01 2000-10-31 1002000-11-01 (null) 90 这很轻易.不幸的是,我们要求数据在将来很长时刻

在已往的几天里,我一向将头撞在桌子上,因此,我转向Stack Overflow.

我正在行使的软件具偶然刻敏感数据.凡是的办理方案是见效和到期日期.

EFF_DT      XPIR_DT     VALUE
2000-05-01  2000-10-31  100
2000-11-01  (null)      90

这很轻易.不幸的是,我们要求数据在将来很长时刻内恣意一再.换句话说,每个5月1日(从2000年开始)我们也许但愿有用值为100,而每个11月1日我们也许但愿将其变动为90.

也许很长一段时刻(大于50年)都是云云,因此我不想只建设一百笔记录.即,我不想这样做:

EFF_DT      XPIR_DT     VALUE
2000-05-01  2000-10-31  100
2000-11-01  2001-04-30  90
2001-05-01  2001-10-31  100
2001-11-01  2002-04-30  90
2002-05-01  2002-10-31  100
2002-11-01  2003-04-30  90
...
2049-05-01  2049-10-31  100
2049-11-01  2050-04-30  90
2050-05-01  2050-10-31  100
2050-11-01  2051-04-30  90

这些值也也许随时刻变革. 2000年之前的值也许是恒定的(没有触发器),而且将来十年的值也许与上一个十年的值差异:

EFF_DT      XPIR_DT     REPEATABLE  VALUE
1995-01-01  2000-04-30  false       85
2000-05-01  2010-04-30  true        100
2000-11-01  2010-10-31  true        90
2010-05-01  (null)      true        120
2010-11-01  (null)      true        115

我们已经有一个文本文件(来自旧版应用措施),该文件以很是靠近此名目标情势存储数据,因此尽也许细密地遵循这种范例的布局有许多甜头.

那么题目就呈此刻检索上:什么值将合用于本日(2010年3月9日)?

好像最好的要领是查找(全部勾当行中的)每个见效日期的最新实例,然后查察哪个实例最大.

EFF_DT      MOST_RECENT XPIR_DT     VALUE
2000-05-01  2009-05-01  2010-04-30  100
2000-11-01  2009-11-01  2010-10-31  90

因为2009-11-01晚于2009-05-01,因此本日的值是90.

譬喻,在2007-06-20上:

EFF_DT      MOST_RECENT XPIR_DT     VALUE
2000-05-01  2007-05-01  2010-04-30  100
2000-11-01  2006-11-01  2010-10-31  90

该值将为100,由于2007-05-01晚于2006-11-01.

行使MySQL日期函数,计较MOST_RECENT字段的最有用要领是什么?

可能,有人能想到一种更好的要领吗?

假如重要的话,该说话是Java.感谢各人!

最佳谜底 假设您想要的“日期”为“ 2007-06-20”.

您必要将非一再元素与一再元素组合在一路,因此您可以执行以下操纵(未经测试,也许必要一些思索,但应该能为您提供总体思绪):

select * from (
  select * from mytable 
  where 
    repeatable = false
    and 
    EFF_DT <= '2007-06-20' < XPIR_DT
  union all
  select * from mytable
  where
    repeatable = true
    and EFF_DT <= str_to_date(concat("2007","-",month(EFF_DT),day(EFF_DT)),"%Y-%m-%d") < XPIR_DT
)
order by EFF_DT desc limit 1

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读