SQL 2005 связал расширенный подзапрос БД Access 2003 с использованием PHP

Я день и ночь искал синтаксис подзапросов и, кажется, до сих пор в неведении относительно них. Вдобавок ко всему, мне может потребоваться более сложный подзапрос для выполнения этого. Я постараюсь объяснить это в меру своих возможностей.

Мы используем базу данных Access для нашей системы продажи билетов (я знаю), и она была создана еще в 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
   }
}

Эти запросы работают как шарм, но я хотел бы объединить их в один, а также включить столбцы «Дата начала» и «Используемое время» во внешний запрос, чтобы я мог также получить доступ к этим данным.


person Barrett Cowan    schedule 22.12.2011    source источник


Ответы (1)


Как насчет:

   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]

Вам не нужно заказывать по с группой по. Я немного подозрительно отношусь к имени клиента и интересуюсь идентификатором клиента.

person Fionnuala    schedule 23.12.2011
comment
Спасибо, это сработало ... Думаю, я был не так уж далек, хех. - person Barrett Cowan; 10.01.2012