46

次のようなレポートがあります。

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)

ただし、そのテーブルに複数の会社がある場合、これは明らかに機能しません。どんな助けでも大歓迎です!

4

3 に答える 3

65

単に使用するmin()

SELECT company, workflow, MIN(date) 
FROM workflowTable 
GROUP BY company, workflow
于 2011-04-20T21:27:38.607 に答える
28

この場合、比較的単純な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
于 2011-04-20T21:42:20.500 に答える
8
SELECT company
   , workflow
   , MIN(date)
FROM workflowTable
GROUP BY company
       , workflow
于 2011-04-20T21:28:12.927 に答える