1

DBMS : MS SQL 2005

次の表を例として考えてみましょう

[CurrencyID] ---- [Rate] ---- [ExchangeDate]

USD --------------- 1 ------ 08/27/2012 11:52 AM

USD -------------- 1.1 ----- 08/27/2012 11:58 AM

USD -------------- 1.2 ----- 08/28/2012 01:30 PM

USD --------------- 1 ------ 08/28/2012 01:35 PM

各通貨の1 日あたりの最新の [ExchangeDate]のレートを取得するにはどうすればよいですか?

出力は次のようになります。

 [CurrencyID] ---- [Rate] ---- [ExchangeDate]

    USD ----------- 1.1 ------- 08/27/2012

    USD ------------ 1 -------- 08/28/2012
4

4 に答える 4

3

どの DBMS を指定していませんでしたか。以下は標準 SQL です。

select CurrencyID, Rate, ExchangeDate
from
  (
    select CurrencyID, Rate, ExchangeDate,
       row_number() 
       over (partition by CurrencyID, cast(ExchangeDate as date)
             order by ExchangeDate desc) as rn
    from tab
  ) as dt
 where rn = 1;
于 2013-08-27T09:05:12.290 に答える
3

SQL 2008 の場合、次のようにします。

SELECT  CurrencyID, cast(ExchangeDate As Date) as ExchangeDate , (
          SELECT   TOP 1 Rate
          FROM     Table T2
          WHERE    cast(T2.ExchangeDate  As Date) = cast(T1.ExchangeDate  As Date)
          AND      T2.CurrencyID = T1.CurrencyID
          ORDER BY ExchangeDate DESC) As LatestRate
FROM    Table T1
GROUP BY CurrencyID, cast(T1.ExchangeDate  As Date)

2008 年より前のものについては、こちらをご覧ください。

于 2013-08-27T09:11:49.083 に答える
0

MySQL の場合:

SELECT Rate, MAX(ExchangeDate) FROM table GROUP BY DATE(ExchangeDate)

集計関数の詳細については、こちらをご覧ください。

他の RDBMS はこれをサポートしていない可能性があります (PostgreSQL がサポートしていないことはわかっています)。

于 2013-08-27T09:04:40.140 に答える
0

あなたはこれを行うことができます、ここでフォーマットを読んでください

select * from exchangetable order by convert(datetime, ExchangeDate, 101) ASC desc


//101 = mm/dd/yyyy - 10/02/2008
于 2013-08-27T09:03:57.503 に答える