gpt4 book ai didi

SQL 查询直接联接或内联接

转载 作者:行者123 更新时间:2023-11-29 14:59:08 25 4
gpt4 key购买 nike

我想找到信用记录状态发生变化之前和之后特定日期的一些客户。例如:

  • 日期 = 2010/07/25
  • 日期2 = 2010/08/30

我希望表中每个在“日期”之前状态为“待处理”的人从相同的人员列表中,我想确定在“date2”之后状态从“待处理”更改为“已批准”的客户列表。例如

  • 在“约会”之前,我有 20,000 个处于“待处理”状态的客户
  • 在“date2”之后,我仍然有 20,000 个客户,但有些客户从待处理变为已批准,我想识别这些客户

下面是我的表格描述:

  • 我有一个只存储唯一信息的表
  • 第二个是第一个表的事务表,它记录每个带有时间戳的事件。非常详细的每分钟表格记录。

我尝试对这两个表进行直接连接,但仍然不确定是否能连接到每个人。原因是,第二个事务表存储了每个状态“状态”(待处理、已批准)和时间。

两个表的共同点是:

  • 状态
  • client_id

最佳答案

这将返回至少有一项交易的客户列表:

  • 2010 年 7 月 25 日之前,状态为“待处理”
  • 2010 年 8 月 30 日之后,状态为“已批准”

查询

SELECT c.*
FROM CLIENTS c
WHERE EXISTS(SELECT NULL
FROM TRANSACTIONS t
WHERE t.client_id = c.client_id
AND t.status = 'pending'
AND t.transaction_date < 2010-07-25)
AND EXISTS(SELECT NULL
FROM TRANSACTIONS t
WHERE t.client_id = c.client_id
AND t.status = 'approved'
AND t.transaction_date > 2010-08-30)

如果您想要这些数量,请使用:

SELECT COUNT(*)
FROM CLIENTS c
WHERE EXISTS(SELECT NULL
FROM TRANSACTIONS t
WHERE t.client_id = c.client_id
AND t.status = 'pending'
AND t.transaction_date < 2010-07-25)
AND EXISTS(SELECT NULL
FROM TRANSACTIONS t
WHERE t.client_id = c.client_id
AND t.status = 'approved'
AND t.transaction_date > 2010-08-30)

我不使用 JOIN 的原因是因为这会在结果集中重复行,对于符合条件的每个事务记录 - 您需要使用 DISTINCTGROUP BY 删除重复项。如果存在一个或多个匹配条件实例,EXIST 将返回 true,并且不会在结果集中产生重复项。

关于SQL 查询直接联接或内联接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3765941/

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