按日期排序加入MYSQL中的两个不同列表?

时间:2015-10-07 06:38:30

标签: mysql

Hello社区我正在使用MySql数据库,我有两个不同记录的列表,但我希望它们一个在另一个之下,具体取决于日期来源以及我在下面显示:

第一个清单:

SELECT  p.ICODPRESTAMO, 
    p.NCAPITAL, 
    (p.NMONPRESTAMO - p.NCAPITAL) AS INTERES, 
    DATE_FORMAT(p.TSFECCREACION,'%d/%m/%Y') AS FECHA
FROM TABPRESTAMO p
WHERE  p.ICODPADPRESTAMO IS NOT NULL 
    AND p.ICODPERBENEFICIARIA = 2
    AND p.SICODESTADO = 1;

SQL返回:

ICODPRESTAMO    NCAPITAL    INTERES FECHA
2   2000.00 200.00  01/02/2014
3   1650.00 247.50  04/06/2014
4   6000.00 900.00  09/06/2014
5   60.00   0.00    22/07/2014
6   600.00  48.00   06/01/2014
7   1500.00 112.50  28/03/2014
8   1600.00 64.00   24/06/2014
9   525.00  0.00    13/09/2014
18  582.00  0.00    03/10/2015

第二个清单:

SELECT  a.ICODAMORTIZACION,
          a.NABOMONTO,
          DATE_FORMAT(a.TSFECCREACION,'%d/%m/%Y') AS FECHA
FROM TABAMORTIZACION a
WHERE  a.ICODPRESTAMO = 1
    AND a.SICODESTADO = 1;

SQL返回:

ICODAMORTIZACION    NABOMONTO   FECHA
1   200.00  16/03/2014
2   200.00  23/03/2014
3   200.00  30/03/2014
4   200.00  13/04/2014
5   200.00  20/04/2014
6   150.00  27/04/2014
7   150.00  04/05/2014
8   200.00  10/05/2014
9   200.00  17/05/2014
10  150.00  24/05/2014
11  232.00  15/09/2014

我的目标是根据 FECHA

联合彼此的注册

如下图所示:

http://i.stack.imgur.com/JsH5F.jpg

按照以下方式开发我的程序:

DELIMITER //
CREATE PROCEDURE reporte4(cod_prestamo INT, cod_per_beneficiaria INT)
BEGIN

    -- Declaración de variables
    DECLARE ID_PRESTAMO INT;
    DECLARE CAPITAL DECIMAL(8,2);
    DECLARE PRESTAMO DECIMAL(8,2);
    DECLARE FECHA VARCHAR(10);

    -- Definición de la consulta
    DECLARE prestamo_beneficiario CURSOR FOR
    SELECT  p.ICODPRESTAMO, 
        p.NCAPITAL, 
        (p.NMONPRESTAMO - p.NCAPITAL) AS INTERES, 
        DATE_FORMAT(p.TSFECCREACION,'%d/%m/%Y') AS FECHA
    FROM TABPRESTAMO p
    WHERE  p.ICODPADPRESTAMO IS NOT NULL 
         AND p.ICODPERBENEFICIARIA = 2
         AND p.SICODESTADO = 1;

    -- Declaración de un manejador de error tipo NOT FOUND
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET @hecho = TRUE;

    -- Abrimos el cursor
    OPEN prestamo_beneficiario;

    -- Comenzamos nuestro bucle de lectura
    loop1: LOOP

    -- Obtenemos la primera fila en la variables correspondientes
    FETCH prestamo_beneficiario INTO ID_PRESTAMO, CAPITAL, PRESTAMO, FECHA;

    -- Si el cursor se quedó sin elementos,
    -- entonces nos salimos del bucle
    IF @hecho THEN
    LEAVE loop1;
    END IF;

    -- Guardamos el acumulado de ventas y el código
    -- si el vendedor actual tiene mejores resultados
    -- SET FECHA_EVA = FECHA_EVA + FECHA;

    -- SELECT FECHA_EVA;

    END LOOP loop1;

    -- Cerramos el cursor
    CLOSE prestamo_beneficiario;

   SELECT prestamo_beneficiario;

END //
DELIMITER ;

我希望你能告诉我如何处理这个案子。

3 个答案:

答案 0 :(得分:0)

在MySQL中使用UNION方法

例如

SELECT
    `column_id` AS `id`,
    `column_name` AS `name`,
    `column_date` AS `date`
FROM `table_name`

UNION
SELECT
    `column_id` AS `id`,
    `column_name` AS `name`,
    `column_date` AS `date`
FROM `second_table_name`

ORDER BY `date`;

答案 1 :(得分:0)

我发现这个问题有点不清楚,但我认为你想要的是一个完全加入。

基本上,您需要这样做:

select * from
(
  select 1
) a
FULL JOIN
(
  select 2
) b
on a.date = b.date

其中,选择1和选择2是您已经发布的内容。

但是,由于MySQL不支持FULL JOIN,你需要模拟它,解释它的方法here

答案 2 :(得分:0)

然后使用ASC订单

SELECT
    `column_id` AS `id`,
    `column_name` AS `name`,
    `column_date` AS `date`
FROM `table_name`

UNION
SELECT
    `column_id` AS `id`,
    `column_name` AS `name`,
    `column_date` AS `date`
FROM `second_table_name`

ORDER BY `date` ASC;