【发布时间】:2021-04-04 12:58:40
【问题描述】:
我必须按文件状态显示最后一行的总数。
tbl_bankdata
bank_id | b_orderno| b_bankname| lead_id
1 | 01-01 | 1 | 1
2 | 01-02 | 2 | 1
3 | 02-01 | 3 | 2
4 | 03-01 | 1 | 3
tbl_fileStatus
f_id | f_bankid| f_filestatus
1 | 1 | 1
2 | 2 | 1
3 | 2 | 2
4 | 1 | 2
5 | 1 | 3
6 | 3 | 2
7 | 3 | 3
我有两张桌子tbl_bankdata 和tbl_fileStatus。我在tbl_fileStatus 中发送bank_id 作为f_bank_id。
现在我必须显示最后一个 f_bankid 计数。
例如,我必须获取 f_filestatus=1 的计数。所以我的输出将是0。为什么0 因为f_bankid 1 and 2 有一个f_filestatus=1 但f_bankid 1 and 2 的最后一行带有f_filestatus 3 and 2。
如果我必须计算f_filestatus=2,那么我将得到输出1,如果计算f_filestatus=3,那么输出将是2。为什么是 2,因为 f_bank_id 1 有 f_filestatus 3 和 f_bank_id 3 有 f_filestatus 3
这是我的查询
select (
SELECT COUNT(f_id)
FROM tbl_fileStatus
WHERE f_filestatus=1 and f_id IN (
SELECT MAX(f_id) FROM tbl_fileStatus GROUP BY f_bankid
)
) as tcount
你能帮我解决这个问题吗?
@forpas 建议后
SELECT (SELECT Count(DISTINCT f_bankid)
FROM tbl_filestatus t
WHERE 1 = (SELECT f_filestatus
FROM tbl_filestatus
WHERE f_bankid = t.f_bankid
ORDER BY f_id DESC
LIMIT 1)) AS tcount1,
(SELECT Count(DISTINCT f_bankid)
FROM tbl_filestatus t
WHERE 2 = (SELECT f_filestatus
FROM tbl_filestatus
WHERE f_bankid = t.f_bankid
ORDER BY f_id DESC
LIMIT 1)) AS tcount2,
(SELECT Count(DISTINCT f_bankid)
FROM tbl_filestatus t
WHERE 3 = (SELECT f_filestatus
FROM tbl_filestatus
WHERE f_bankid = t.f_bankid
ORDER BY f_id DESC
LIMIT 1)) AS tcount3
【问题讨论】:
-
你期望什么输出?您的查询有什么问题?
-
@JeffUK,f_filestatus=1 然后 cout 0,f_filestatus=2 计数 1 f_filestatus=3 然后计数 2
-
你有什么 MySQL 版本?从 MySQL 8 开始你可以使用窗口函数来解决这个问题
-
@SlavaRozhnev,PHPmyadmin 5.0.4 已安装
-
@user9437856 最后一行的计数将始终为 1...您能否在您的问题中添加一个示例预期结果集?
标签: mysql sql subquery left-join greatest-n-per-group