Mysql 基于最小发生值构造表和连接记录
我需要设置一个查询,以运行每个销售团队的销售报告。以下简化模型涉及三个表 SQL FIDDLE在此: 我需要加入transactions表中适当的销售团队,使用用户id和每个交易的最低可能加入团队日期(大于transaction_date)Mysql 基于最小发生值构造表和连接记录,mysql,sql,join,Mysql,Sql,Join,我需要设置一个查询,以运行每个销售团队的销售报告。以下简化模型涉及三个表 SQL FIDDLE在此: 我需要加入transactions表中适当的销售团队,使用用户id和每个交易的最低可能加入团队日期(大于transaction_date) **desired results** sales_team date amount Sales team 1 Jan 2nd 20.00 Sales team 1
**desired results**
sales_team date amount
Sales team 1 Jan 2nd 20.00
Sales team 1 Jan 3rd 10.00
Sales team 2 Jan 7th 15.00
Sales team 3 Jan 11th 13.00
Sales team 2 Jan 16 5.00
我并不是要完整的查询,只是需要一些关于如何基于小于某个指定日期的最高日期连接数据的帮助
谢谢 类似这样:
select date, amount, (
select st.sales_team
from sales_team st
where st.user_id = t.user_id
and st.date_joined_team < t.date
order by st.date_joined_team desc
limit 1) as sales_team
from transactions t
请参阅“最低可能日期\加入团队的日期大于事务\日期”-但您的“期望结果”看起来像“最高可能日期\加入团队的日期小于事务\日期”。但是。。使用限制为1的相关子选择。加入太复杂了。@Spiegel-你说得对。更新的问题。这样做是否会引起性能问题?例如,是否有50万条记录要返回?@Ben 500K交易?是的,500K交易,按销售团队和金额分组summed@Ben是的,恐怕会很慢。您需要对其进行基准测试。但这不是因为方法。我在MySQL中找不到任何有效的解决此类问题的方法。原因是:MySQL不能同时为
st.date\u joined\u team
和order by st.date\u joined\u team desc
使用索引。这同样适用于select max(st.date_加入团队)。。st.date_加入团队的地点代码>这可能是一个业余问题,但如果在查询末尾添加where子句,是否会将子选择限制为主查询返回的行。我要求尽可能简短地回答问题。看见
select date, amount, (
select st.sales_team
from sales_team st
where st.user_id = t.user_id
and st.date_joined_team < t.date
order by st.date_joined_team desc
limit 1) as sales_team
from transactions t
and st.date_joined_team < t.date
order by st.date_joined_team desc
and st.date_joined_team > t.date
order by st.date_joined_team asc