Этот вопрос покажется неубедительным для всех экспертов в представлениях SQL-сервера, но ...
Итак, у меня есть небольшой набор данных, которые нужны моему клиенту для составления отчетов. Я должен признать, что хотя я спрашивал их об их требованиях к отчетности, я до сих пор не вижу, что моя база данных может быть лучше оптимизирована.
Один из фрагментов данных, которые им нужны, - это разница во времени между двумя задачами, которые могли быть запущены:
select caseid, hy.createdate
from app_history hy
where hy.activityid in (303734, 303724)
Это дает мне две строки (после редактирования) для каждого случая, которые затем должны быть измерены; но несколько покачиваний:
Действие 303734 будет всегда выполняться, действие 303724 может выполняться.
Каждая комбинация 303734 и 303724 совпадает. Предположительно, у дела может быть 1 несоответствующий 303734 с подобранной парой впоследствии во 2 представлении. Соответствие им может быть до интуиции. Нехорошо.
Может быть более одного представления для каждого caseid, и если это так, то оба действия будут выполняться каждый последующий раз.
Нет способа записать номер представления в эту таблицу.
Таблица app_history содержит идентификаторы пользователя, регистра и активности в качестве внешних ключей. PK - это идентификатор столбца идентификации.
Есть ли лучший способ написать запрос?
После справки от КМ:
select
c.id, c.submissionno, hya.caseid, hya.createtime, hyb.caseid, hyb.createtime
,CASE
WHEN hyb.caseid IS NOT NULL THEN DATEDIFF(mi,hya.createtime,hyb.createtime)
ELSE NULL
END AS Difference
from app_case c
inner join app_history hya on c.id = hya.caseid
left outer join app_history hyb on c.id = hyb.caseid
where hya.activityid in (303734) and hyb.activityid in (303724) order by c.id asc
Это почти работает.
У меня теперь есть эта проблема:
460509|2|460509|15:15:39.000|460509|15:16:13.000|1
460509|2|460509|15:15:39.000|460509|15:18:13.000|3
460509|2|460509|15:17:52.000|460509|15:16:13.000|-1
460509|2|460509|15:17:52.000|460509|15:18:13.000|1
Итак, теперь я получаю 1 ряд, сравнивая каждый из двух для каждого из четырех рядов ... ммм, я думаю, это лучшее, на что я могу надеяться. (