【发布时间】: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