• ベストアンサー

Access2003 上からn番目の数値の取得

Access2003 上からn番目の数値の取得 クロス集計クエリで、年間12回測定しているうちの 4番目の数値を取得したいと考えています。 最大、最小、平均はもちろんわかるのですが、 「n番目」が判らず困っています。 ちなみに下は最大値を集計したクロス集計クエリです。 TRANSFORM Max([気象テーブル].気温) AS 気温の最大 SELECT [気象テーブル].年 FROM [気象テーブル] GROUP BY [気象テーブル].年 PIVOT [気象テーブル].測定地点; Maxのところに何らかの関数が入るのでしょうか・・・ どなたかご教示をお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

回答無いようですけど・・・ 4番目・・・とは、高い方からでしょうか。 遅い、速いは度外視します。 ユーザ定義関数を使う例とないます。 クロス集計の1行目を以下の様に書き換えます。 TRANSFORM GetTempRowData([年],[測定地点],4) AS 気温4 標準モジュールに以下を記述します。 (ADOの例となりますので、ADO参照は組み込んでください) Public Function GetTempRowData(iYear As Variant, _ '何年?                 sWhere As Variant, _ '測定地点は?                 iNum As Long) As Variant '何番目?   Dim rs As New ADODB.Recordset   On Error Resume Next   GetTempRowData = Null   If (IsNull(iYear) Or IsNull(sWhere)) Then Exit Function   rs.Source = "SELECT 気温 FROM 気象テーブル " _           & "WHERE Year(日付) = " & iYear _           & " AND 測定地点 = '" & sWhere & "' " _           & "ORDER BY 気温 DESC, 日付 ;"   rs.Open , CurrentProject.Connection, adOpenStatic, adLockReadOnly   If (rs.RecordCount > iNum) Then     rs.AbsolutePosition = iNum     GetTempRowData = rs(0)   End If   rs.Close End Function ※ DAO なら、AbsolutePosition は0スタートになります。  (ADOなら、1スタート) ※ 並び順は、ORDER BY 気温 DESC, 日付 部分になりますので、必要に応じて変更ください。 ※ 関数名は、適宜変更してください。

raymay0905
質問者

お礼

返信がおそくなりましてすみませんでした。 「上から○番目」の関数は用意されてないんですね・・・ 頑張って作ってみます。 ありがとうございました。

関連するQ&A