- ベストアンサー
Access2003 上からn番目の数値の取得
Access2003 上からn番目の数値の取得 クロス集計クエリで、年間12回測定しているうちの 4番目の数値を取得したいと考えています。 最大、最小、平均はもちろんわかるのですが、 「n番目」が判らず困っています。 ちなみに下は最大値を集計したクロス集計クエリです。 TRANSFORM Max([気象テーブル].気温) AS 気温の最大 SELECT [気象テーブル].年 FROM [気象テーブル] GROUP BY [気象テーブル].年 PIVOT [気象テーブル].測定地点; Maxのところに何らかの関数が入るのでしょうか・・・ どなたかご教示をお願いいたします。
- みんなの回答 (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, 日付 部分になりますので、必要に応じて変更ください。 ※ 関数名は、適宜変更してください。
お礼
返信がおそくなりましてすみませんでした。 「上から○番目」の関数は用意されてないんですね・・・ 頑張って作ってみます。 ありがとうございました。