Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Nối hai bảng trong đó bảng A có giá trị ngày và cần tìm ngày tiếp theo trong B bên dưới ngày trong A

-- 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 )

Những gì chúng tôi đang làm:

  • cho mỗi ngày trong id_date bảng (bảng của bạn A ),
  • chúng tôi tìm thấy ngày trong date_val table (bảng của bạn B )
  • là ngày cao nhất trong date_val bảng (nhưng vẫn nhỏ hơn id_date.date)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tinyint vs Bit?

  2. mySQL riêng biệt Tham gia?

  3. Đúng / Sai so với 0/1 trong MySQL

  4. lỗi 1206 bất cứ khi nào cố gắng xóa bản ghi khỏi bảng

  5. MySQL Delete với Group By