【问题标题】:Run MySql query on all ids in another table对另一个表中的所有 id 运行 MySql 查询
【发布时间】:2014-07-03 23:13:54
【问题描述】:

我有这个查询,它提供了我数据库中客户的最后交易日期、名字和姓氏。假设我想找到客户 13423 的最后交易日期,这是查询:

SELECT LastTransactionDate AS was_last_seen,
(SELECT DISTINCT(FirstName) FROM Clients WHERE PmsId=13423) AS FirstName, 
(SELECT DISTINCT(LastName) FROM Clients WHERE PmsId=13423) AS LastName
FROM(
    SELECT DISTINCT(pa.PmsId),pa.LastTransactionDate,cpr.ClientPmsId
    FROM Patients AS pa RIGHT JOIN ClientPatientRelationships AS cpr ON 
    pa.PmsId=cpr.PatientPmsId WHERE cpr.ClientPmsId = 13423
) AS result ORDER BY LastTransactionDate DESC LIMIT 1;

现在我想在客户端表中的每个客户端上运行它。

我可以使用以下方式找到所有客户的列表:

SELECT DISTINCT(PmsId) AS distinct_clients FROM Clients;

我是 SQL 新手,无论如何我可以在所有客户端上运行它吗?我很想在一个查询中做到这一点,但我不确定它是否可能。

我也尝试使用带有游标的 SP,但由于某种原因,游标为每个 PmsId 获取两个结果,但我的 SELECT DISTINCT(PmsId) 查询返回 DISTINCT id 列表,因此不确定游标是如何运行的一个 PmsId 通过主查询两次。

游标也超级慢,运行 6 分钟后超时,这很奇怪,因为我只有大约 14,000 个客户端,而我使用的上述查询在单个客户端上运行不到一秒。

我想知道我是否应该尝试在 PHP 中执行此操作?或者这是不好的做法?

让我知道这是否有意义

谢谢!

【问题讨论】:

    标签: mysql sql stored-procedures cursor


    【解决方案1】:

    使用max(b.LastTransactionDate)group by a.ClientPmsId 查找每个客户的LastTransactionDate,然后将其加入Clients 表以获取名字和姓氏。

    select a.PmsId, a.FirstName, a.LastName, b.LastTransactionDate
    from (select PmsId, FirstName, LastName
        from Clients
        group by PmsId) a
    left join (select a.ClientPmsId, max(b.LastTransactionDate) LastTransactionDate
        from ClientPatientRelationships a
        join Patients b on a.PatientPmsId = b.PmsId
        group by a.ClientPmsId) b on a.PmsId = b.ClientPmsId;
    

    【讨论】:

    • 您先生,救了我的命。非常感谢!!这真的很有帮助,给了我我需要的东西:)
    猜你喜欢
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 2011-01-02
    • 1970-01-01
    • 2023-03-31
    • 2014-11-08
    • 1970-01-01
    相关资源
    最近更新 更多