我有一个包含客户投资交易的数据库。对于每个季度(四个月),有一个期初余额,一个期末余额,以及之间的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
谢谢!
答案 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;