1

多数のテーブルのうち、どのテーブルに最も古いレコードが含まれているかを特定したいと考えています。これを行うには、次のように言えばよいと思いました。

SELECT TOP 1 TableName FROM
( 
  SELECT CreateDate, 'Table1' as TableName FROM Table1 
  UNION
  SELECT CreateDate, 'Table2' as TableName FROM Table2
)
ORDER BY CreateDate

SQL Server 2008R2 では、「ORDER」の近くに構文エラーがあることがわかります。

何か案は?

4

4 に答える 4

5

サブクエリにエイリアスを与える必要があります。

SELECT TOP 1 TableName FROM
( 
  SELECT CreateDate, 'Table1' as TableName FROM Table1 
  UNION
  SELECT CreateDate, 'Table2' as TableName FROM Table2
) q
ORDER BY CreateDate
于 2013-03-22T18:22:16.060 に答える
1

サブクエリでエイリアスを定義していない、

SELECT TOP 1 TableName 
FROM
     ( 
         SELECT CreateDate, 'Table1' as TableName FROM Table1 
         UNION
         SELECT CreateDate, 'Table2' as TableName FROM Table2
     ) aliasName     -- <<== ADD HERE
ORDER BY CreateDate

ALIASサブクエリを識別するために必要です。

于 2013-03-22T18:22:12.733 に答える
1
SELECT TOP 1 TableName FROM
( 
  SELECT CreateDate, 'Table1' as TableName FROM Table1 
  UNION
  SELECT CreateDate, 'Table2' as TableName FROM Table2
) RandomName
ORDER BY CreateDate
于 2013-03-22T18:23:37.780 に答える
0

他のすべて(これまでのところ)は正しい答えを持っています(派生テーブルのエイリアスが必要です)が、CreateDateとTableNameのすべての値をUNIONして並べ替えるのではなく、各テーブルから最小限のCreateDateを取得することもお勧めします、重複を排除する必要がない場合は、UNIONALLを使用する習慣を身に付けてください。だから、このようなもの:

SELECT TOP 1 TableName FROM
( 
  SELECT MIN(CreateDate) AS CreateDate, 'Table1' as TableName FROM Table1 
  UNION ALL
  SELECT MIN(CreateDate) AS CreateDate, 'Table2' as TableName FROM Table2
) x
ORDER BY CreateDate ASC
于 2013-03-22T18:30:16.167 に答える