Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Połącz dwie tabele, w których tabela A ma wartość daty i musi znaleźć następną datę w B poniżej daty w 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 )

Co robimy:

  • dla każdej daty w id_date tabela (Twoja tabela A ),
  • znajdujemy datę w date_val tabela (Twoja tabela B )
  • która jest najwyższą datą w date_val tabela (ale wciąż mniejsza niż 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. Jak mogę korzystać z równoczesnego dostępu do tabeli mysql w PHP?

  2. MySQL przy usuwaniu kaskadowym. Przykład testowy

  3. Czy przedłużanie zajęć jest dobrą praktyką?

  4. MySQL:Jak szukać wariantów pisowni? (murray, murray itp.)

  5. Próba użycia R z MySQL:użyte polecenie jest niedozwolone w tej wersji MySQL