これは私の頭の中にありますが、最初に SQL でユーザー定義関数を作成して、@mainid を受け入れる都市のコンマ区切りリスト文字列を作成し、次のことを行うことをお勧めします。
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+',' , '') + city
FROM submain
WHERE mainid = @mainid
...そして @listStr を返します。これは、都市のカンマ区切りのリストになります。関数 MainIDCityStringGet() を呼び出すとしましょう
次に、最終結果については、次のコマンドを実行するだけです
select cts.mainid,
cts.cities,
sts.minstartdate,
sts.maxenddate
from ( select distinct mainid,
dbo.MainIDCityStringGet(mainid) as 'cities'
from submain) as cts
join
( select mainid,
min(startdate) as 'minstartdate',
max(enddate) as 'maxenddate'
from submain
group by mainid ) as sts on sts.mainid = cts.mainid
where startdate <is what you want it to be>
and enddate <is what you want it to be>
startdate と enddate でどの程度正確にフィルター処理したいかによっては、各サブクエリ内に where フィルターを配置する必要があり、結合の 2 番目のサブクエリに HAVING グループ化フィルターを使用する必要がある場合があります。フィルターの性質を明確に述べていませんでした。
それが役立つことを願っています。
もちろん、これはストアドプロシージャになります。デバッグが必要な場合があります。