gpt4 book ai didi

mysql - 如果日期存在,如何根据日期从 sql 中获取总和日期?

转载 作者:太空宇宙 更新时间:2023-11-03 11:22:32 26 4
gpt4 key购买 nike

在我的应用程序中,我需要使用以下条件获取 SUM(admin_amount)

表一

id, driver_id, admin_amount, trip_date

表2

id, driver_id, from_date, to_date, amount, created_date

在表 2 中,管理员将根据日期从司机那里获得佣金金额。例如,司机必须在 2019-10-01 至 2019-10-10 期间向管理员支付 1000 卢比的乘车佣金。因此,当司机当时来支付管理员费用时,我需要找到司机支付管理员的待处理总金额。

我正在尝试...

我正在尝试从 table2 中获取上次交易日期 (created_date),以便我可以获得上次付款的日期,并基于此我可以计算 SUM(admin_change) 到现在

我可以通过两个查询来做到这一点。

1) 获取最后日期

SELECT * FROM  table2 
WHERE driver_id = 14
ORDER BY created_date DESC
LIMIT 1;

2) 如果我得到数据,则使用条件中的日期,否则简单地获取所有数据的 SUM()。

任何人都可以帮助在单个查询中实现这一目标吗?

尝试

SELECT SUM(admin_amount) 
FROM table1
WHERE driver_id = 33
AND trip_date >= (SELECT created_date
from table2
WHERE driver_id = 33
ORDER by created_date DESC
LIMIT 1);

此查询在任何数据存在时有效,但在 table2 没有相应驱动程序的数据时无效。

表1

1, 33, 50, 2019-10-01
2, 33, 70, 2019-10-01
3, 33, 30, 2019-10-10

表2

//如果是新驱动,则还没有事务。

//如果有之前的交易,那么数据将如下所示。

1, 33, 2019-10-01, 2019-10-10, 150, 2019-10-29

最佳答案

据我了解 - 当 WHERE 子句中的子查询未返回任何内容 (NULL) 时,您不想应用条件 trip_date >= (... )。在这种情况下,您可以使用 COALESCE() 将返回的 NULL 转换为一个日期,该日期小于 trip_date 中的任何可能值(例如.'1900-01-01')。在这种情况下,条件将始终被评估为 TRUE:

SELECT SUM(admin_amount) 
FROM table1
WHERE driver_id = 33
AND trip_date >= COALESCE((
SELECT created_date
from table2
WHERE driver_id = 33
ORDER by created_date DESC
LIMIT 1
), '1900-01-01');

要将其与 Madhur Bhaiya 已删除的答案结合起来,您可以在子查询中使用 MAX(created_date)

SELECT SUM(admin_amount) 
FROM table1
WHERE driver_id = 33
AND trip_date >= COALESCE((
SELECT MAX(created_date)
from table2
WHERE driver_id = 33
), '1900-01-01');

这应该没有任何区别 - 但我更喜欢这个,因为它更短而且更便携(与不同的 DBMS 供应商一起)。

关于mysql - 如果日期存在,如何根据日期从 sql 中获取总和日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58155570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com