我日夜搜索关于子查询的语法,我似乎仍然对它们一无所知。最重要的是,似乎我可能需要更多的高级子查询来完成此操作。我将尽我所能解释这件事。
我们使用Access DB作为我们的票务系统(我知道),它建于1997年。后台使用的是SQL Server 2005。我目前正在用PHP编写一个脚本,当他们提前购买的块时间降至零以下时,向客户发送电子邮件。凭借我在SQL和ODBC方面的一点编码经验,我能够创建两个目前可用的查询。我需要添加更多的数据到这些查询,但我几乎在我的极限。
此查询将提取所有与我们预付时间的不同客户(块时间/事件代码201)
$query1 = "SELECT [Customer Name], MAX([Incident #])
FROM [Incidents]
WHERE [Event Code] = 201
GROUP BY [Customer Name]
ORDER BY [Customer Name] ASC";
因为我对子查询的知识有限,所以我有另一个查询,必须找到是否有一个较新的"事件#",其"事件代码"为203。如果有,请不要包含它们。
while( odbc_fetch_row( $query1 ))
{
$query2 = "SELECT [Customer Name]
FROM [Incidents]
WHERE [Customer Name] = '$customer_name'
AND [Incident #] > $incident_num
AND [Event Code] = 203";
if( !odbc_fetch_row( $query2 )) {
//list customers
}
}
这些查询工作就像一个魅力,但是,我想把它们合并成一个,还包括列'开始日期'和'使用的时间'在外部查询,以便我可以访问该数据,以及
如何:
SELECT [Customer Name], MAX([Incident #])
FROM [Incidents] a
WHERE [Event Code] = 201
AND [Customer Name] Not IN
(SELECT [Customer Name]
FROM [Incidents] b
WHERE b.[Customer Name] = a.[Customer Name]
AND b.[Incident #] > a.[Incident #]
AND [Event Code] = 203)
GROUP BY [Customer Name]
不需要order by和group by。我对客户名有点怀疑,对客户id也很好奇。