如何在同一列中显示 30 天的数据,其余的将显示 90 天?
How to display the one column the data for 30 days and rest will display for 90 days with same query?
几天前我问了一个问题,它使用以下查询解决了我的问题。我刚刚添加了 and t.date_of_created > DATE_SUB(NOW(), INTERVAL 90 DAY)
以仅显示 90 天的数据并且它正在运行。
现在我的问题是,我必须只显示 SUM(f_filestatus = 3) AS tcount3
30 天,剩下的将显示 90 天的数据。
有什么想法可以做到这一点吗?
SELECT
SUM(f_filestatus = 1) AS tcount1,
SUM(f_filestatus = 2) AS tcount2,
SUM(f_filestatus = 3) AS tcount3
FROM (
SELECT t.f_bankid, t.f_filestatus
FROM tbl_fileStatus t
WHERE t.f_id = (SELECT f_id FROM tbl_fileStatus WHERE f_bankid = t.f_bankid and t.date_of_created > DATE_SUB(NOW(), INTERVAL 90 DAY) ORDER BY f_id DESC LIMIT 1)
) t
我会使用 window 函数编写您当前的查询:
SELECT SUM(f_filestatus = 1) AS tcount1,
SUM(f_filestatus = 2) AS tcount2,
SUM(f_filestatus = 3) AS tcount3
FROM (SELECT fs.*,
ROW_NUMBER() OVER (PARTITION BY f_bank_id ORDER BY date_of_created DESC, f_id DESC) as seqnum
FROM tbl_fileStatus fs
WHERE fs.date_of_created > CURDATE() - INTERVAL 90 DAY
) fs
WHERE seqnum = 1;
但是您的问题的答案是简单地添加一个新条件:
SELECT SUM(f_filestatus = 1) AS tcount1,
SUM(f_filestatus = 2) AS tcount2,
SUM(f_filestatus = 3 AND fs.date_of_created > CURDATE() - INTERVAL 30 DAY) AS tcount3
FROM (SELECT fs.*,
ROW_NUMBER() OVER (PARTITION BY f_bank_id ORDER BY date_of_created DESC, f_id DESC) as seqnum
FROM tbl_fileStatus fs
WHERE fs.date_of_created > CURDATE() - INTERVAL 90 DAY
) fs
WHERE seqnum = 1;
编辑:
您可以在旧版本中使用相同的想法:
SELECT SUM(f_filestatus = 1) AS tcount1,
SUM(f_filestatus = 2) AS tcount2,
SUM(f_filestatus = 3 AND fs.date_of_created > CURDATE() - INTERVAL 30 DAY) AS tcount3
FROM tbl_fileStatus fs
WHERE fs.f_id = (SELECT fs2.f_id
FROM tbl_fileStatus fs2
WHERE fs2.bank_id = fs.bank_id AND
fs2.date_of_created > CURDATE() - INTERVAL 90 DAY
ORDER BY fs2.f_id DESC
LIMIT 1
)
几天前我问了一个问题and t.date_of_created > DATE_SUB(NOW(), INTERVAL 90 DAY)
以仅显示 90 天的数据并且它正在运行。
现在我的问题是,我必须只显示 SUM(f_filestatus = 3) AS tcount3
30 天,剩下的将显示 90 天的数据。
有什么想法可以做到这一点吗?
SELECT
SUM(f_filestatus = 1) AS tcount1,
SUM(f_filestatus = 2) AS tcount2,
SUM(f_filestatus = 3) AS tcount3
FROM (
SELECT t.f_bankid, t.f_filestatus
FROM tbl_fileStatus t
WHERE t.f_id = (SELECT f_id FROM tbl_fileStatus WHERE f_bankid = t.f_bankid and t.date_of_created > DATE_SUB(NOW(), INTERVAL 90 DAY) ORDER BY f_id DESC LIMIT 1)
) t
我会使用 window 函数编写您当前的查询:
SELECT SUM(f_filestatus = 1) AS tcount1,
SUM(f_filestatus = 2) AS tcount2,
SUM(f_filestatus = 3) AS tcount3
FROM (SELECT fs.*,
ROW_NUMBER() OVER (PARTITION BY f_bank_id ORDER BY date_of_created DESC, f_id DESC) as seqnum
FROM tbl_fileStatus fs
WHERE fs.date_of_created > CURDATE() - INTERVAL 90 DAY
) fs
WHERE seqnum = 1;
但是您的问题的答案是简单地添加一个新条件:
SELECT SUM(f_filestatus = 1) AS tcount1,
SUM(f_filestatus = 2) AS tcount2,
SUM(f_filestatus = 3 AND fs.date_of_created > CURDATE() - INTERVAL 30 DAY) AS tcount3
FROM (SELECT fs.*,
ROW_NUMBER() OVER (PARTITION BY f_bank_id ORDER BY date_of_created DESC, f_id DESC) as seqnum
FROM tbl_fileStatus fs
WHERE fs.date_of_created > CURDATE() - INTERVAL 90 DAY
) fs
WHERE seqnum = 1;
编辑:
您可以在旧版本中使用相同的想法:
SELECT SUM(f_filestatus = 1) AS tcount1,
SUM(f_filestatus = 2) AS tcount2,
SUM(f_filestatus = 3 AND fs.date_of_created > CURDATE() - INTERVAL 30 DAY) AS tcount3
FROM tbl_fileStatus fs
WHERE fs.f_id = (SELECT fs2.f_id
FROM tbl_fileStatus fs2
WHERE fs2.bank_id = fs.bank_id AND
fs2.date_of_created > CURDATE() - INTERVAL 90 DAY
ORDER BY fs2.f_id DESC
LIMIT 1
)