表1
CREATE TABLE tblFinancials ( pkFinancialID int(11) NOT NULL AUTO_INCREMENT, fkUserID int(11), fkProfileID int(11), fkFinancialEntryID int(11), FinancialAmount decimal(10,2), FinancialDateTime datetime );
pkFinancialID fkUserID fkProfileID fkFinancialEntryID FinancialAmount FinancialDateTime 1 1 1 1 100.00 2014-06-07 07:00:00 2 1 1 2 100.00 2014-06-08 08:00:00
表2
CREATE TABLE tblFinancialEntry ( pkFinancialEntryID int(11) NOT NULL AUTO_INCREMENT, FinancialEntry varchar(255) );
pkFinancialEntryID FinancialEntry 1 Credit 2 Debit
表3
CREATE TABLE tblUsers ( pkUserID int(11) NOT NULL AUTO_INCREMENT, UserName varchar(255) );
pkUserID UserName 1 Test User
表4
CREATE TABLE tblProfiles ( pkProfileID int(11) NOT NULL AUTO_INCREMENT, fkUserID int(11), ProfileName varchar(255) );
pkProfileID fkUserID 1 1
期望的查询结果:
Total Due: 0.00 -100.00 2014-06-07 07:00:00 100.00 2014-06-08 08:00:00
最佳答案
我将把借方/贷方的事情留给您来合并:
select concat(
case when T.pkFinancialID is null
then 'Total Due: '
else ' '
end, cast(FinancialTotalAmount as char(20))
)
, case when T.pkFinancialID is null
then null
else FDateTime
end
from (
select pkFinancialID
, max(FinancialDateTime) as FDateTime
, SUM(CASE WHEN fkFinancialEntryID = 1
THEN 1
ELSE -1
END * FinancialAmount) as FinancialTotalAmount
from tblFinancials
WHERE tblFinancials.fkUserID = 1
AND tblFinancials.fkProfileID = 1
group by pkFinancialID with rollup
) as T
order by case when T.pkFinancialID is null then 0 else 1 end
, FDateTime;
Total Due: 0.00 (null)
100.00 June, 07 2014 07:00:00+0000
-100.00 June, 08 2014 08:00:00+0000
关于php - mysql:ROLLUP on TOP,SUM(FINANCIAL AMOUNT),然后按DATETIME DESC排序FINANCIAL AMOUNT列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24153463/