Мне нужно получить четыре даты начала и окончания из большой таблицы (более 100 000 записей)
Я работаю над таблицей, которая содержит некоторые данные, по которым реклама проходит через нашу систему, и мне нужно выяснить, за последние два раза над ней работали.
Я могу получить последний раз, используя функции MAX, подобные этой
Для простоты:
Select MAX(DateEntered) AS LastTimeStartDate
From myTable
where field1 = 'Whohasit' and appname2 ='Ad Workflow'
Select MAX(DateEntered) AS LastTimeEndDate
From myTable
where field1 = 'Whohasit' and appname2 ='Automated Flows'
Что мне нужно сделать, так это найти время последнего запуска и остановки непосредственно перед MAX (), поэтому, если это объявление остановилось и началось, скажем 10 раз, я должен найти последние два времени начала и окончания. Это будет 9 и 10 раз.
Итак, используя таблицу ниже, мне нужны следующие четыре даты
start1: 2011-11-01 16: 21: 45.830 stop1: 2011-11-01 16: 25: 05.740
start2: 2011-11-02 19: 28: 22,303 stop2: 2011-11-02 19: 32: 35.467
Спасибо
Моему столу нравится таблица ниже:
Whohasit dateentered appname2
Complete 2011-11-15 06:26:16.680 Ad Workload
Proofing 2011-11-14 14:50:41.350 Automated Flows
Proofing 2011-11-14 14:50:41.500 Automated Flows
Complete 2011-11-08 07:09:59.353 Ad Workload
Proofing 2011-11-03 08:24:29.520 Online Proofs Update
Proof-Pend 2011-11-02 19:32:46.983 Ad Workload
Proof-Pend 2011-11-02 19:32:38.147 Automated Flows
Proofing 2011-11-02 19:32:38.143 Automated Flows
Proofing 2011-11-02 19:32:38.200 Automated Flows
Proof-Pend 2011-11-02 19:32:35.467 Automated Flows
Proofing 2011-11-02 19:32:35.467 Automated Flows
Proofing 2011-11-02 19:32:34.887 Automated Flows
Ad Return 2011-11-02 19:29:55.350 Uploads Done Transfer
Ad Return 2011-11-02 19:28:22.303 Ad Workload
Ad Return 2011-11-02 15:40:48.470 File Attach
Ad Return 2011-11-02 15:40:00.100 Order Entry
Ad Return 2011-11-02 15:40:00.970 Order Entry
Proof-Pend 2011-11-02 15:40:00.800 Order Entry
Proof-Pend 2011-11-01 16:25:17.533 Ad Workload
Proof-Pend 2011-11-01 16:25:05.740 Automated Flows
Proofing 2011-11-01 16:25:05.737 Automated Flows
Proofing 2011-11-01 16:25:05.610 Automated Flows
Ad Return 2011-11-01 16:23:26.457 Uploads Done Transfer
Ad Return 2011-11-01 16:21:45.830 Ad Workload
вот код SQL, который я использовал для получения максимального количества дат, которые мне нужны:
Select (e.Firstname + ' ' + e.Lastname) as Name, awa.Revisionno,awa.DateAssigned, awa.dateAdcompleted,ao.artComplDate, awa.adorderId, nsdac.newStartDateAc, nsdar.newStartDateAR,ned.newEndDate,
CASE WHEN
DateDiff(hh, AWFE.dbo.getFridayOffset(COALESCE(newStartDateAR,newStartDateAc)), COALESCE(newEndDate,awa.dateAdcompleted,ao.artComplDate,null)) <= 24 THEN 1 ELSE 0 END AS Hit1,
CASE WHEN
DateDiff(hh,AWFE.dbo.getFridayOffset(COALESCE(newStartDateAR,newStartDateAc)), COALESCE(newEndDate,awa.dateAdcompleted,ao.artComplDate,null)) <= 48 THEN 1 ELSE 0 END AS Hit2,
DateDiff(hh, AWFE.dbo.getFridayOffset(COALESCE(newStartDateAR,newStartDateAc)),COALESCE(ned.newEndDate, awa.dateAdcompleted,ao.artComplDate,null)) As Hours
from AdWorkAssignment awa
JOIN Employee as e ON e.EmployeeId = awa.EmployeeId
JOIN adOrder as ao ON ao.AdOrderid = awa.AdOrderId
LEFT OUTER JOIN (select adCopyId, MAX(dateentered) as newStartDateAC from adcopylog WHERE appname2 = 'Ad Workload' and whohasitid = 'Ad Creation' group by adCopyId) nsdac on nsdac.adCopyId =awa.AdOrderId
LEFT OUTER JOIN (select adCopyId, MAX(dateentered) as newStartDateAR from adcopylog WHERE appname2 = 'Ad Workload' and whohasitid = 'Ad Return' group by adCopyId) nsdar on nsdar.adCopyId =awa.AdOrderId
LEFT OUTER JOIN (select adCopyId, MAX(dateentered) as newEndDate from adcopylog WHERE appname2 = 'Automated Flows' and whohasitid = 'Proof-Pend' group by adCopyId) ned on ned.adCopyId =awa.AdOrderId
WHERE
awa.DateAssigned BETWEEN dbo.ToStartDate('11/01/2011') AND dbo.ToEndDate('11/30/2011')
AND ao.ProofFlag = 1 AND ao.NewMediaFlag = 1 AND awa.VendorId = 'SHOP'
order by hit1,hit2
Я должен понять, что искать ...