当前位置: 首页 > 面试题库 >

联接两个表,其中表A具有日期值,并且需要在B中查找下一个日期,该日期比A中的日期低

施知
2023-03-14
问题内容

我得到此表“ A”:

| id | date       |
===================
| 1  | 2010-01-13 |
| 2  | 2011-04-19 |
| 3  | 2011-05-07 |
| .. | ...        |

这个表“ B”:

| date       | value |
======================
| 2009-03-29 | 0.5   |
| 2010-01-30 | 0.55  |
| 2011-08-12 | 0.67  |

现在,我正在寻找一种方法来联接这两个表,这些表的“ B”中的“值”列映射到“ A”中的日期。对我来说,棘手的部分是表“
B”仅存储更改日期和新值。现在,当我需要在表“ A”中使用该值时,SQL需要回顾其要求该值的日期之后的下一个日期。

因此,这些表的JOIN最终应如下所示:

| id | date       | value |
===========================
| 1  | 2010-01-13 | 0.5   |
| 2  | 2011-04-19 | 0.55  |
| 3  | 2011-05-07 | 0.55  |
| .. | ...        | ...   |

我怎样才能做到这一点?


问题答案:
-- Create and fill first table
CREATE TABLE `id_date` (
  `id` int(11) NOT NULL auto_increment,
  `iddate` date NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

INSERT INTO `id_date` VALUES(1, '2010-01-13');
INSERT INTO `id_date` VALUES(2, '2011-04-19');
INSERT INTO `id_date` VALUES(3, '2011-05-07');

-- Create and fill second table    
CREATE TABLE `date_val` (
  `mydate` date NOT NULL,
  `myval` varchar(4) collate utf8_bin NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

INSERT INTO `date_val` VALUES('2009-03-29', '0.5');
INSERT INTO `date_val` VALUES('2010-01-30', '0.55');
INSERT INTO `date_val` VALUES('2011-08-12', '0.67');

-- Get the result table as asked in question
SELECT iddate, t2.mydate, t2.myval
FROM `id_date` t1
JOIN date_val t2 ON t2.mydate <= t1.iddate
AND t2.mydate = ( 
SELECT MAX( t3.mydate ) 
FROM `date_val` t3
WHERE t3.mydate <= t1.iddate )

我们正在做什么:

  • 对于id_date表格(您的表格A)中的每个日期,
  • 我们在date_val表格(您的表格B)中找到日期
  • 这是date_val表格中的最高日期(但仍小于id_date.date)


 类似资料:
  • 问题内容: 我在Java中有三个约会:a,b,c。这些日期中的任何一个或所有日期都可以为空。在没有大量if- else块的情况下确定a,b,c中最早日期的最有效方法是什么? 问题答案: 无法避免空值检查,但是通过一些重构,您可以使其变得更轻松。 创建一个安全地比较两个日期的方法: 然后结合调用: 实际上,您可以将此方法用作任何通用方法:

  • 我试图在两天之间创建一个天数列表。 我创建了如下解决方案: 但它只在90%的情况下有效(如果有月变化,它就不起作用) 例如,当我选择日期时: 从8月29日到9月30日,从8月31日,它给我打印了几天 有没有办法解决我的问题,或者有更好的办法? 编辑: 我的问题和建议的问题不同,因为在我的问题中,我有两个日期作为输入 例如 在建议的重复结果,这可能是int号 我的问题是如何循环两个日期之间的所有日期

  • 问题内容: 我有3个表要合并,每个表都有不同的关注列。我也有一个id变量,我想在id内进行单独的合并。我的想法是,我想按日期(在ID内)合并X,Y和Z,并且如果特定变量不存在该日期,则缺少值。 任何想法如何编写此SQL语句?我尝试弄乱“完全连接”和叉积的where语句,但是我一直在获取某些ID-日期组合(有时甚至没有ID)的重复值。 任何帮助,将不胜感激。 问题答案: 加入可能是棘手的事情。我通常

  • 问题内容: 使用标准的mysql函数可以编写查询,该查询将返回两个日期之间的天数列表。 例如,给定2009-01-01和2009-01-13,它将返回一个具有以下值的列表: 编辑:看来我还不清楚。我要生成此列表。我在数据库中存储了值(按日期时间),但希望将它们在左外部联接中汇总到上述日期列表中(我希望这种联接的某些右侧在几天内会为null并将对此进行处理) )。 问题答案: 我将使用此存储过程将所

  • 问题内容: 我从Stackoverflow那里获得了这段代码,并对其进行了少许更改以适应今天的日期。 我想检查今天是否适合两个日期之间。但这是行不通的。我想念什么? 问题答案: 编辑: 使用<=或> =来计算今天的日期 这是您的代码的正确答案。只需使用strtotime()php函数

  • 问题内容: 我需要在Java中比较两个日期。我正在使用这样的代码: 这是行不通的。变量的内容如下: 包含 包含 我该如何解决? 问题答案: 日期相等性取决于两个等于毫秒的日期。使用创建新的Date对象将永远不会等于过去创建的日期。Joda Time 的API简化了日期的处理。但是,仅使用Java的SDK: