• ベストアンサー

2件目のデータを取得する

お世話になります。 データベース:SQLSERVER2005 テーブル名:URIAGE_TABLE 項目:URIAGE_CODE、URIAGE_DATE、URIAGE_KINGAKU 上記テーブルの、2件目のデータのみを取得 するSQL文をを知っている方いますか? どうぞ宜しくお願いします。

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

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

SQL Server にはOracleのROWNUM擬似列のようなものはないので、Orderのない状態ではWHERE ROWNUM=2のような 簡単なとり方はできないと思います。 そこまでやることに意味があるかはわかりませんが、あえてやるなら SELECT TOP 2 URIAGE_CODE,URIAGE_DATE,URIAGE_KINGAKU FROM URIAGE_TABLE EXCEPT SELECT TOP 1 URIAGE_CODE,URIAGE_DATE,URIAGE_KINGAKU FROM URIAGE_TABLE もし、Orderを切れるのならば、ROW_NUMBERが使えますので、そちらの方が普通です。 SELECT URIAGE_CODE,URIAGE_DATE,URIAGE_KINGAKU FROM (SELECT ROW_NUMBER() OVER (ORDER BY ソートキー) SEQ, * FROM URIAGE_TABLE) tmp WHERE SEQ=2

nihonbashi
質問者

お礼

詳細SQL文を有難うございました。 一発取得は無理ですか...。

関連するQ&A

  • 【MySQL】SITEN_CODE毎の高速ランキン

    MySQL5.7でランキングの集計をしたいのですが、遅すぎて困っています。 URIAGEテーブルのSITEN_CODE毎にKINGAKU_RANKとKENSU_RANKを集計したい。 SELECT URIAGE.SITEN_CODE, URIAGE.SHAIN_BANGO, (SELECT COUNT(URIAGE2.KINGAKU) FROM URIAGE AS URIAGE2 WHERE URIAGE2.KINGAKU > URIAGE.KINGAKU AND URIAGE2.SITEN_CODE = URIAGE.SITEN_CODE)+1 AS KINGAKU_RANK, URIAGE.KINGAKU, (SELECT COUNT(URIAGE2.KENSU) FROM URIAGE AS URIAGE2 WHERE URIAGE2.KENSU > URIAGE.KENSU AND URIAGE2.SITEN_CODE = URIAGE.SITEN_CODE)+1 AS KENSU_RANK, URIAGE.KENSU FROM URIAGE ・件数が少ない内は動いたので、データ登録(約13万件) ・データ登録後、次のSQLで12時間動かしても終了しない。 という状態で困っています。 高速にランキング集計する方法があればご教授くださいm(_ _)m

  • 集計のSQL文を教えてください

    集計で困っています。 助けてください。 uriage_date(date型) uriage_kingaku 2005/01/01 00:15   2000 2005/01/01 12:20   2500 2005/01/02 00:00   1000 ←ここは前日分(2005/01/01)に 2005/01/02 05:15   1800 2005/01/04 12:30   2300 ~ 2005/12/31 20:20   5000 2005/12/31 22:45   1200 上の様なテーブルから 売上合計(1月分) uriage_date     goukei_kingaku 2005/01/01      5500 2005/01/02      1800 2005/01/03      0 ~ 2005/01/31      9000 この様に1日毎(当日00:01~翌日00:00)の売上の合計金額 を一ヶ月単位で集計したいのですが、SQL文が解りません。 00:00の売上は前日の合計に入れたいです。 データの無い日も0円として欲しいです。 よろしくおねがいします。

  • EXSIST述語を使った副問合わせについて

    SELECT HINMOKU_NAME FROM HINMOKU WHERE HINMOKU_CODE IN (SELECT HINMOKU_CODE FROM URIAGE WHERE URIAGE_DATE = '2004-11-10'); 上記をSQL文をEXISTS述語を使って書き換えると エラーが出てしまい、うまく書き換えがすることが できません。下記にエラーがでるSQL文を記載いたします。 SELECT HINMOKU_NAME FROM HINMOKU WHERE EXISTS (SELECT HINMOKU_CODE FROM URIAGE WHERE URIAGE_DATE ='2004-11-10' WHERE HINMOKU.HINMOKU_CODE=URIAGE.HINMOKU_CODE); 上記SQL文についてどこに問題があるのか、ご教授お願い致します。

  • SQLの質問です。

    SQLの質問です。 SQL Server 2008 R2 を使っている初心者です。 下の2つのテーブルがあります。 1)売上情報 table_uriage ・uriage_id ・user_id ・uriage_date ・uriage_kingaku 2)入金情報 table_nyukin ・nyukin_id ・user_id ・nyukin_date ・nyukin_kingaku この2つのテーブルに対して、同じ期間を指定して、集計表(ユーザー毎の合計)を 作りたいと思っています。別々の表にするには何の問題もないのですが、 問題は2つのSQLの結果を1つの表にしたいのですが、SQLをどのように組んだらいいか わかりません。 具体的な表としては、 user_id uriage_total nyukin_total ======================================== 001 11111 22222 002 33333 44444 003 55555 66666 みたいな感じになればいいのです。 どなたか教えて下さい。 よろしくお願いいたします。

  • T-SQL(1件のみの取得)(再度)

    前回、-SQL(SQL Server2000)で対象データを一件のみ取得する場合、どのようにすれば良いでしょうか? 処理的に無理でしょうか? PL/SQLの"ROWNUMBER = 1"のような条件は使うことが出来ないのでしょうか? 上記の内容の質問をさせて頂いて、『TOP』が使用できるという回答をもらったのですが、この『TOP』は、SELECT文で取得しようとする場合 どのようにすれば良いでしょうか? ヘルプ等で調べてみたものの、良く理解できませんでした;; 取得内容としては、該当データ1レコード内の1フィールドを取得したいです。 /* PL/SQLから引用 */ SELECT 項目A   FROM テーブルA WHERE 項目A = 'AAA' AND 項目B = 10 AND ROWNUMBER = 1 この様な、取得方法を使用したいのですが、T-SQLではどのように行えばよろしいでしょうか? また、別の方法がありましたらお教えください。。。

  • 指定した年月までのデータを取得するSQL文

    いつもお世話になっております。 今、指定した年月までのデータを取得するSQL文を考えています。 例:NENGETSU_DATEカラムがDATE型で、 データとして、2008/11/12と、2008/11/18と、2008/12/12が入っているとして、11月だけのデータを取得したい。(今回は、2008/11/12と、2008/11/18を取得) どのようなSQL文を書けばよろしいでしょうか。 よろしくお願いいたします。

  • AccessVBAでSQLServerのデータを操作する際のlikeについて

    いつもお世話になっております。 タイトルの件なのですが、Accessのフォームを作成しました。 実行ボタンを押下すると入力した内容を元に、SQL文を作成してSQLServerのデータベースを操作するという内容です。 以下の順番で操作しています。 (1)該当データの件数を取得 (2)該当データをAccess上の一時テーブルに挿入 (3)該当データを更新 入力項目の1つが前方一致ですので、Where文に 項目名 like '入力内容%' といったlike演算子を含む分があります。 Where句は(1)~(3)全てで同じものを使用しています。 ですが、(1)(2)はこの文で問題なく実行できるのですが、(3)のみ実行できません。 同じWhere句を使っているのに、何故このような違いが起きるのでしょうか? 詳しい事は初心者なので分からないのですが、 DAOを使用してExecuteでSQL文を実行しています。

  • SQL Server を使っています。SQLの質問です。

    SQL Server を使っています。SQLの質問です。 得意先テーブルと商品テーブルと売上明細テーブルがあります。 一つの商品に関して得意先ごとに最新の売上明細データの一覧を作成したいと考えて います。 ■売上明細データ 明細ID (meisai_id) 得意先ID (tokuisaki_id) 商品ID  (syohin_id) 売上金額(uriage_kingaku) 売上日 (uriage_date) ■売上明細データ(table_uri_maisai) meisai_id tokuisaki_id syohin_id uriage_kingaku uriage_date =================================================================   1     aaa     001     100     2010/01/01   2     aaa     002     200     2010/01/01   3     bbb     001     105     2010/01/02   4     bbb     002     205     2010/01/02   5     ccc     001     110     2010/01/03   6     ccc     002     210     2010/01/03   7     aaa     001     100     2010/01/04   8     aaa     002     200     2010/01/04   9     bbb     001     105     2010/01/05   10     bbb     002     205     2010/01/05   11     ccc     001     110     2010/01/06   12     ccc     002     210     2010/01/06 上のような明細があり、「syohin_id」が「001」のデータに関して、 得意先ごとの最新のデータだけを抽出したいと考えています。 この場合ですと、以下の3件のデータが抽出できればよいわけです。   7     aaa     001     100     2010/01/04   9     bbb     001     105     2010/01/05   11     ccc     001     110     2010/01/06 tokuisaki_id と syohin_id の2つを特定して1件のデータを抽出するには 以下のSQLで実現できましたが、syohin_id だけを指定して複数のデータを 出すことがどうしてもできません。 SELECT * FROM table_uri_meisai WHERE uriage_date = (select max(uriage_date) FROM table_uri_meisai WHERE tokuisaki_id = 1 AND syohin_id = 1) AND tokuisaki_id = 1 AND syohin_id = 1 どなたかご指導ください。 よろしくお願いします。

  • Excelワークシート上にSQL文を書き込み取得したデータをワークシート上に取得

    はじめましてこんにちわ。 現在ExcelとSQLServerでADOを使ってデータを取得したいと思っています。 SQL文をワークシート上に書いてそれを読み込んでSQL文を実行するようにしたいのですが、それを取得したあと、データをExcelワークシートに表示させる方法が思いつきません。 SQL文で指定するデータは任意の文です。そのため取得されたフィールドがいくつできるかわからない状態です。 例えば、SQL文であったら SELECT 商品ID,商品名,価格 from 商品テーブル なりますが、商品ID,商品名,価格フィールドを自動的に Excelフォーム上に作りたいということです。 ・基本的にSELECT文しか使わない ・SQL文は任意のSQL文である の条件がありますがそれはできるのでしょうか? よろしくお願いします。

  • SQLでデータを1件だけ取得したいのですが。

    SQLでデータを1件だけ取得したいのですが。 以下のようなテーブルが2つあるとします。 ------------------------------------ テーブルA     テーブルB   値X           値X    値Y   1           1    20   2           2    NULL   3           2    60   4           2    70               4    NULL               4    NULL ------------------------------------ ここで、テーブルAの値Xと、テーブルBの値Xをリンクさせます。 テーブルAにデータがあれば、テーブルBに無くても出力します(外部結合イメージ) テーブルAの値Xに対して、テーブルBの値Xは2件以上リンクされる可能性があります。 この場合は1件のみ出力します。 その1件の決め方は、テーブルBの値YがNULLでは無く最大の物です。 但し値Yは全てNULLの可能性もあるので、その場合NULLとして1件出力します。 上記の出力イメージ ------------------------------------  値X    値Y  1    20  (1件の場合そのまま出力。1件がNULLでもそのまま出力)  2    70  (NULLではない最大の1件を出力)  3    NULL  (テーブルBになくても出力)  4    NULL  (値が全てNULLの場合、NULLとして1件出力) ------------------------------------ どのようなSQLを記載すれば実現可能でしょうか?