2016-05-27 8 views
0

Ich versuchte Max im Tabellenformat bereitzustellen, aber es scheint nicht gut in StackOver, so dass Snapshot der 2 Tabellen. enter image description here Entschuldigen Sie sich für die Formatierung.Max-Datum zwischen den Datensätzen und über Tabellen - SQL Server

SQL Server 2012

**MS Table**    
**mId tdId name     dueDate** 
1 1 **forecastedDate**    1/1/2015 
2 1 **hypercareDate**    11/30/2016 
3 1 LOE 1      7/4/2016 
4 1 LOE 2      7/4/2016 
5 1 demo for yy test   10/15/2016 
6 1 Implementation – testing 7/4/2016 
7 1 Phased Rollout – final  7/4/2016 
8 2 forecastedDate    1/7/2016 
9 2 hypercareDate    11/12/2016 
10 2 domain - Forte    NULL 
11 2 Fortis completion   1/1/2016 
12 2 Certification    NULL 
13 2 Implementation    7/4/2016 
----------------------------------------------- 

**MSRevised** 
**mId revisedDate** 
1 1/5/2015 
1 1/8/2015 
3 3/25/2017 
2 2/1/2016 
2 12/30/2016 
3 4/28/2016 
4 4/28/2016 
5 10/1/2016 
6 7/28/2016 
7 7/28/2016 
8 4/28/2016 
9 8/4/2016 
9 5/28/2016 
11 10/4/2016 
11 10/5/2016 
13 11/1/2016 
---------------------------------------- 

Die erforderliche Ausgabe ist 1. Wird die 'TId' Nummer werden vorbei, zum Beispiel 1, lässt es tid nennen (1) 2. Wollen TID vergleichen (1) alle Meilensteine ​​(außer hypercareDate) mit dem prognostiziertenDate-Meilenstein von tid (1) 3. Rückgabe wenn das Meilensteindatum (anders als hypercareDate) größer ist als das vorhergesagteDatum Die obigen 3 Schritte sind einfach, aber ich muss Vergleichen Sie zunächst das Datum der Meilensteine ​​mit den entsprechenden überarbeiteten Daten aus der überarbeiteten Tabelle und wählen Sie das maximale Datum unter allen, die verglichen werden müssen h das prognostizierteDatum

Antwort

0

Ich schaffte es, dies zu lösen. Veröffentlichen Sie die Antwort, hoffe, dass es jemand hilft.

//Insert the result into temp table 
INSERT INTO @mstab 
SELECT [mId] 
     , [tId] 
     , [msDate] 
    FROM [dbo].[MS] 
    WHERE ([msName] NOT LIKE 'forecastedDate' AND [msName] NOT LIKE 'hypercareDate')) 
// this scalar function will get max date between forecasted duedate and forecasted revised date  
SELECT @maxForecastedDate = [dbo].[fnGetMaxDate] ('forecastedDate'); 
// this will get the max date from temp table and compare it with forecasatedDate/ 
SET @maxmilestoneDate = (SELECT MAX(maxDate) 
         FROM (SELECT ms.msDueDate AS dueDate 
            , mr.msRevisedDate AS revDate 
           FROM @mstab as ms 
            LEFT JOIN [MSRev] as mr on ms.msId = mr.msId 
          ) maxDate 
          UNPIVOT (maxDate FOR DateCols IN (dueDate, revDate))up);