次のようなレポートがあります。
CompanyA Workflow27 June5
CompanyA Workflow27 June8
CompanyA Workflow27 June12
CompanyB Workflow13 Apr4
CompanyB Workflow13 Apr9
CompanyB Workflow20 Dec11
CompanyB Wofkflow20 Dec17
これは、SQL(具体的には、T-SQLバージョンServer 2005)を使用して行われます。
SELECT company
, workflow
, date
FROM workflowTable
レポートには、各ワークフローの最も早い日付のみを表示したいと思います。
CompanyA Workflow27 June5
CompanyB Workflow13 Apr4
CompanyB Workflow20 Dec11
何か案は?これを理解することはできません。最も早いトレイ日付を返すネストされた選択を使用し、それをWHERE句で設定しようとしました。これは、会社が1社しかない場合に最適です。
SELECT company
, workflow
, date
FROM workflowTable
WHERE date = (SELECT TOP 1 date
FROM workflowTable
ORDER BY date)
しかし、このテーブルに複数の会社がある場合、これは明らかに機能しません。どんな助けも大歓迎です!
単にmin()
を使用してください
SELECT company, workflow, MIN(date)
FROM workflowTable
GROUP BY company, workflow
この場合、比較的単純な_GROUP BY
_が機能しますが、一般に、順序付けできない追加の列があり、それらが関連付けられている特定の行から列が必要な場合は、結合して戻すことができますキーのすべての部分を使用した詳細、またはOVER()
を使用:
実行可能な例(元のデータのWofkflow20エラーを修正)
_;WITH partitioned AS (
SELECT company
,workflow
,date
,other_columns
,ROW_NUMBER() OVER(PARTITION BY company, workflow
ORDER BY date) AS seq
FROM workflowTable
)
SELECT *
FROM partitioned WHERE seq = 1
_
SELECT company
, workflow
, MIN(date)
FROM workflowTable
GROUP BY company
, workflow