SQLで日付が一番古いデータの月を取得する方法

このQ&Aのポイント
  • DBに入ったデータから一番古い年月を取得する方法を教えてください。
  • データの中で一番古い日付を見つけて、その年月を取得するためのSQLを教えてください。
  • PHPとSQLを使用して、DB内の一番古いデータの月を取得する方法を教えてください。
回答を見る
  • ベストアンサー

sqlで日付が一番古いデータの月を取得する方法

言語:php DB:postgresql 質問させて頂きます。 現在DBに入ったデータから一番古い年月を取得しようとしています。 「DBの中身(仮)」 [id][date] 1 2012-05-18 18:20:16.064554 2 2012-04-17 18:43:12.732035 この際古いのは2個目のデータなので、 これを判断して「201204」という形で取得したいと考えているのですが、 この処理を行うにはどのようなSQLを実行すればよいのでしょうか? SQLのみで判断できるのか、一旦全データを取得したうえでPHPで判断する必要があるのか、 もじ方法をご存知の方がいらっしゃいましたらよろしくお願い致します。 また、質問に不備がありましたら、すぐに修正致しますのでご指摘お願いします。

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

MIN()とto_char(time,'YYYYMM')で処理できませんか?

non05410
質問者

お礼

yambejp様のアドバイスを参考にさせて頂き、 「min(to_char(time,'YYYYMM'))」という形で解決することが出来ました! 本当にありがとうございました!

その他の回答 (1)

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.2

ポスグレつかったことないから良くわからないけど、 limit を使うらしいよ。 select * from ・・・ order by date limit 1 みたいなことかな?

non05410
質問者

お礼

回答頂きありがとうござました! 今回はyambejp様の回答を使わせて頂きましたが、 ShowMeHow様の回答を見て、確かに!と思わされました! 本当にありがとうございます。

関連するQ&A

  • sqlにて0無しの月をフォーマットする方法

    質問させていただきます。 DB:postgresql 言語:PHP タイトルの通りなのですが、 現在下記のような形でSQLを実行しています。 「to_char(created, 'YYYY年MM月') as created_styled,」 しかし、この形では月の部分が01月と0を含んだものになってしまいます。 MySQLであれば、%cを使用すれば0無しの月を生成出来るようなのですが、 postgresqlでも同じような機能は無いのでしょうか? また、無理にSQL側で処理を行う必要も無いので、データを取り出した後での処理方法でも構いません。 もしこういった場合に一般的な0を消す対処方法があれば教えて頂けると助かります。 よろしくお願い致します。 また、質問に不備などがあればすぐに修正致しますので、その際はご指摘お願いします。

  • PostgreSQLで日付範囲内の日付を全 て取得する方法

    PostgreSQLに、 2003/01/01~2003/05/10などの範囲の日付を 全て取得するSQLはありますでしょうか? 以下のような結果(日付リスト)を取得したいのですが、 DBには、日付カラムは存在しません。 PostgreSQL自体に日付を管理しているテーブルなどがあれば、それにアクセスできれば可能そうなのですが・・・ 2003/01/01 2003/01/02 2003/01/03 ・ ・ ・ 2003/05/10 よろしくお願いします。

  • 月の日付一覧について

    PostgreSQL 7.4.8 php4.4.4 で開発をしています。 あるログデータを集計したいのですが、 日付の処理が上手くいかずに困っています。 DB側には 日付 | ID 2007-01-01 10 2007-01-01 10 2007-01-01 10 2007-01-01 10 2007-01-01 20 2007-01-01 20 2007-01-01 20 2007-01-10 10 2007-01-10 10 2007-01-10 15 というログデータを日付毎にIDをカウントして 一月単位で日付毎の件数を取得しようとしています。 日付をtruncする事で一月分のデータは取得出来るのですが、 IDが一件も無い日付も「0」で表示したいのです。 php側で吸収する手段も有ると思うのですが 保守性を考えるとデータの取得はsqlで何とかしたいのです。 ご教授頂ければ幸いです。 よろしくお願い致します。

  • 月一覧を取得するには?(201205、201204

    言語:PHP 質問させて頂きます。 現在、日付の一覧を表示したくプログラムを作成しています。 $start_date = "201012"; $end_date = date("Ym");//201205が代入されるとします。 この2010年12月から2012年05月までの日付を月別で 201012 201101 201102 201103 201104 201105 201106 . . . 201205 と、上記のような文字列で取得したいと考えているのですが、 どのような方法を行えば良いのでしょうか? 「201012」 このような文字列で取得したいわけは、 SQLにて検索にしようしたいと考えているからです。 「TO_CHAR(created,'yyyymm') = '201012'」 いろいろと考えてはみたのですが、これだという方法が思いつかなかったため、質問をさせて頂きました。 どなたかご存知の方がいらっしゃいましたら、よろしくお願い致します。 また、質問に不備などがあった際はすぐに修正致しますので、ご指摘下さい。

    • ベストアンサー
    • PHP
  • SQL Serverからのvarchar型のデータ取得データ長

    PearのDBを使いSQLサーバーから「varchar(8000)」で宣言したフィールドからデータを取得すると255バイトで切られます(実際にはもっと長いデータが入っている)。”$db->tableinfo(テーブル)”でテーブルの情報をみると問題のフィールドの長さが「[len]=>255」となっています。 何とかサーバー上の型通りの長さのデータを取り出すことはできないでしょうか? 環境は以下の通りです。 ●サーバー OS: WindowsXP SQL Server Ver.: SQL Server 2000の8.0 Developer Edition ●クライアント1 OS: FedoraCore4 PHP Ver.: 5.0.4 FreeTDS Ver.: 0.63 ●クライアント2 OS: WindowsXP PHP Ver.: 5.0.5 ※クライアント1、2のDBはそれぞれバンドルされているPearを実行インストールしました。 サーバー⇔クライアント1 サーバー⇔クライアント2 共に長さ255で切られる。 AccessでODBC経由で取得した場合はデータ長255以上で取得できました。 何卒宜しくお願い致します。

    • ベストアンサー
    • PHP
  • SQLの結果の取得方法について。

    件名の件でいくつか質問があります。 そもそも質問がおかしいということがあるかもしれませんので、もしそうだった場合はご指摘頂けると嬉しいです。 1.SQLの結果の取得方法はResultSetで複数行を取得する方法とカーソル(こっちもクラスはResultSet?)で1行ずつ取得する方法の2種類があるのでしょうか?  ※ PL/SQLなどではなくjavaでの実装になります。  またカーソルで取得する実装方法など参考になるサイトがありましたら教えて頂けると助かります。  PL/SQLのサイトばかりがヒットしてしまいまして・・・。 2.ResultSetで取得した場合、全部のレコードをメモリに展開するのでしょうか? それとも1行(もしくは複数行)毎にDBから実データを取得するのでしょうか。  自分で調べたところではResultSetの実装によるということですが、一度にメモリに展開するドライバもあれば、1行や複数行で展開するドライバもあるということでしょうか。  例えばOracleやDB2やPostgreSQLなどがどのような実装であるかはよく分かりませんでした。  それぞれがどのように実装されているか調べるにはどのようにすればよいでしょうか。 3.巨大なレコード数を結果として取得する際はResultSetで取得するとメモリを圧迫するから、1行ずつ取得した方がパフォーマンスがいいかもしれないとサイトで見たのですが、これはカーソルを使用するということでしょうか?  それともsetFetchSizeで1行指定をしてResultSetで取得するということでしょうか。 4.setFetchSizeは1文にしか反映されないと、どこかのサイトでみたのですが、1文というのはSQL1回ということでしょうか。  同じStatmentで違うSQLを発行する場合は発行毎にsetFetchSizeを呼び出すということでしょうか。  それとも例えば1SQLの結果が100レコードでsetFetchSizeを10にした場合、ループ内で10回setFetchSizeを設定しないといけないということでしょうか? 調べている動機はたくさんのレコードを取得するSQLがあるのですが、フェッチ?カーソル?で取得した方がパフォーマンスがいいのではという話を受けたのですが、その人もあまり詳しくなく、ネットで調べていたのですが、上記のような疑問が中々解消できず質問させて頂いた次第です。 よろしくお願い致します。

    • ベストアンサー
    • Java
  • 指定した年月までのデータを取得するSQL文

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

  • データの取得方法

    失礼いたします。 SQL文でDBからデータを取得して、それを 表示したいのですがうまくいきません。 どこを間違っているか、どうしたらいいか コメントお願いします。 //他のページからIDを取得 <?php $aid=htmlspecialchars($_GET["id"]); ?> //SQL <?php $sql = "SELECT A.USERID,A.NAME,B.BIL_ID,B.B.BIL_NAME FROM USER A,BIL B WHERE A.BIL_ID=B.BIL_ID AND USER_ID=".intval($_GET["aid"]); !$an = mysql_query($sql,$db) $user = mysql_fetch_row($an); mysql_free_result($an); ?> //データの表示 //SQLで実行した'BIL_ID'を表示したい。 <TD><INPUT type="text" name="bid" value="<?php print(intval($_GET["$user[2]"])) ?>"></TD>

    • ベストアンサー
    • PHP
  • 重複しているデータを取得したい

    [TBL_TEMP] ID 年月1  年月2 項目A  項目B -------------------------------------------- 1 200909 200910 aaaa bbbb 2 200807 200809 aaaa bbbb 3 200909 200910 aaaa bbbb 4 200909 200909 aaaa bbbb 5 200807 200809 aaaa bbbb 上記のようなデータがあり、年月1と年月2でグルーピングして、重複しているデータを抽出する場合は、以下のSQLでデータを取得できます。 SELECT MIN(ID),年月1,年月2 FROM TBL_TEMP GROUP BY 年月1,年月2 HAVING COUNT(1) >= 2 上記のSQLの場合、重複データの中でIDが一番小さいもののみが取得されるため、ID=1、2の2データが取得できます。 これを重複データ全件、つまり、ID=1,2,3,5のデータを取得するには、SQLをどのように書けばよいのかがわかりません。 どなたかアドバイスを頂けないでしょうか? よろしくお願いいたします。

  • postgreSQLで更新後のデータを取得したい。

    postgreSQLで更新後のデータを取得したい。 初めて質問させていただきます。 postgreSQLでupdateした後、更新後のデータをselectで取得したいのですが、 トランザクションが完了するまでにselect文が発行されているみたいで、更新前のデータを取得してしまいます。 それぞれ、違うファイルから投げられているので、同じトランザクションにすることはできません。 何かいい方法があればご教授お願いします。 a.phpで下記のSQLを発行 update test_tbl set test1 = 'aaa' where test2 = 'bbb' a.phpが走っている間に、下記のb.phpが実行される。 select test1 from test_tbl 環境 php5 postgres8.1

専門家に質問してみよう