MySQL Query在日期范围内获取端点?

时间:2014-02-06 18:08:23

标签: mysql view subquery

我有一个包含客户投资交易的数据库。对于每个季度(四个月),有一个期初余额,一个期末余额,以及之间的N个交易。

该表的结构如下:

transaction_id (primary key)
investment_id (index, foreign key)
amount (decimal(11,2))
type (ENUM:'Opening','Closing','Transfer')
transaction_date (DATE)

我需要创建一个视图,对于每个investment_id,将检索“Opening”类型的第一个事务,“Closing”类型的最后一个事务,以及特定日期之间的“Transfer”类型的所有N个事务范围。但是,除了该范围内的端点之外,不应包括“打开”或“关闭”类型的事务。例如:

SELECT * FROM view_transactions
WHERE transaction_date > '2000-01-01' AND transaction_date < '2006-06-01'
AND investment_id = 6578734

谢谢!

1 个答案:

答案 0 :(得分:0)

CREATE FUNCTION pFunc1() returns DATE DETERMINISTIC NO SQL return @param;
CREATE FUNCTION pFunc2() returns DATE DETERMINISTIC NO SQL return @param;

CREATE VIEW view_transactions AS
   SELECT * 
   FROM transactions
   WHERE
        type = 'Opening' AND
        transaction_date > pFunc1() AND
        transaction_date < pFunc2()
   ORDER BY transaction_date
   LIMIT 1
   UNION
   SELECT *
   FROM transactions
   WHERE
        type = 'Transfer' AND
        transaction_date > pFunc1() AND
        transaction_date < pFunc2() AND
   UNION
   SELECT *
   FROM transactions
   WHERE
        type = 'Closing' AND
        transaction_date > pFunc1() AND
        transaction_date < pFunc2()
   ORDER BY transaction_date DESC
   LIMIT 1;

然后:

  SELECT v.*
  FROM (select @param:='2000-01-01' pFunc1) param1, (select @param:='2000-06-01' pFunc2) param2 view_transactions v;