Подзапрос со значениями из той же строки - PullRequest
0 голосов
/ 13 сентября 2011

У меня небольшая проблема с MySQL У меня есть база данных (Arr_Times) со следующими столбцами Mysql_id название ARR_DT (дата и время прибытия) DC_DT (дата и время отправления)

Mysql_id | Name           | ARR_DT              | DC_DT
1        |Doe, Jane       | 2011-08-01 00:02:00 | 2011-08-01 13:32:00
2        |Doe, John       | 2011-08-01 00:23:00 | 2011-08-01 18:32:00
3        |Smith, Peter    | 2011-08-01 00:12:00 | 2011-08-01 08:38:00
4        |Unknown, Jane   | 2011-08-01 13:03:00 | 2011-08-01 14:02:00
5        |Day, Doris      | 2011-08-01 10:10:00 | 2011-08-01 13:32:00
6        |Bergman, Ingrid | 2011-08-01 11:35:00 | 2011-08-01 13:59:00
7        |Jones, Tom      | 2011-08-01 00:12:00 | 2011-08-01 22:49:00
8        |Schubert, Mark  | 2011-08-01 18:45:00 | 2011-09-01 02:22:00
9        |Doe, Jane       | 2011-08-01 23:04:00 | 2011-010-01 03:32:00

Как правило, есть ок. 150-220 строк для каждого дня и время отправления может быть до 48 часов позже времени прибытия. Я пытаюсь выяснить, сколько человек в отделении в любой момент времени

Например, автоматический подсчет сотрудников в отделе для каждой строки, когда человек прибывает с правилом: подсчитайте всех, у кого ARR_DT <= current_row's ARR_DT И DC_DT> current_row's ARR_DT Чтобы получить результат, например, для экспорта в сводную таблицу Excel.

mysql_id | Name | ARR_DT_unix | DC_DT_unix | Number_In_department

Но это проходит всю базу данных для каждой строки и сильно загружает процессор. Есть ли лучшее решение для этой проблемы.

Вот что я сейчас пытаюсь сделать, но у меня неправильные результаты

SELECT
  T1.mysql_id,
  T1.Name, 
  FROM_UNIXTIME(T1.ARR_DT_unix) AS ARR_DT,
  FROM_UNIXTIME(T1.DC_DT_unix) AS DC_DT,
  (SELECT count(T2.mysql_id) FROM dates T2 WHERE T1.ARR_DT_unix <= T2.ARR_DT_unix AND T1.DC_DT_unix > T2.ARR_DT_unix ) AS Person_Count 
FROM 
  dates T1
INNER JOIN 
 dates T2
ON T1.mysql_id = T2.mysql_id
ORDER BY T1.ARR_DT_unix;

Что было бы лучшим вариантом для этой проблемы?

Спасибо, Marko

1 Ответ

0 голосов
/ 03 мая 2012

Вы можете использовать

 T1.mysql_id,

в предложении where, чтобы ограничить поиск в вашем подзапросе, это может решить вашу проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...