mysql - 如何在日期范围内连接 MySQL 表?

标签 mysql

我有一个源表 ( TableA ),其中包含每天的多条记录。我需要将其左连接(在日期字段上)到 TableB每年包含一些记录。

问题是 TableA应加入到 TableB 中最早的记录日期来自TableA <= 日期 TableB .

CREATE TABLE IF NOT EXISTS `tableA` (
  `id` int(6) unsigned NOT NULL,
  `date` date NOT NULL,
  `content` varchar(200) NOT NULL,
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
INSERT INTO `tableA` (`id`, `date`, `content`) VALUES
  ('1', '2017-10-03', 'The earth is round.'),
  ('2', '2018-01-01', 'The earth is flat'),
  ('3', '2018-01-01', 'One hundred angels can dance on the head of a pin'),
  ('4', '2018-01-02', 'The earth is flat and rests on a bull\'s horn'),
  ('5', '2018-01-03', 'The earth is like a ball.');

CREATE TABLE IF NOT EXISTS `tableB` (
  `date` date NOT NULL,
  `content` varchar(200) NOT NULL,
  PRIMARY KEY (`date`)
) DEFAULT CHARSET=utf8;
INSERT INTO `tableB` (`date`, `content`) VALUES
  ('2017-01-01', 'ONE'),
  ('2017-12-01', 'TWO'),
  ('2018-01-02', 'THREE'),
  ('2018-01-05', 'FOUR');

基于this SQLFiddle ,我正在寻找以下结果。

tableA.id | tableB.content
--------------------------
1         | TWO
2         | THREE
3         | THREE
4         | THREE
5         | FOUR

最佳答案

这是一种解决方案:

SELECT a.id, b.content
FROM TableA a
JOIN TableB b ON b.date = (
  SELECT MIN(b2.date)
  FROM TableB b2
  WHERE b2.date >= a.date
);

我不确定这是否是最有效的方法,但是it works .

关于mysql - 如何在日期范围内连接 MySQL 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52087873/

相关文章:

php - 在一个查询中执行多个 mysql 更新

MySQL 独特的性能

MySQL json_remove 返回空值

c# - 如何向MySQL C#插入一个值

mysql - 我们如何使用删除操作来删除使用三个主键的表中的行。有没有办法删除

mysql - 如何使用参数进行过滤但保留 NULL?

php - 从 MySql 查询多个值获取 True/False 结果

python - Django 的压力测试使其在有空闲系统资源的情况下变慢

mysql - 如何检查MySQL中当前的MERGE_THRESHOLD值?

关于 web 的 MySQL 设计