[過去ログ] SQL質疑応答スレ 17問目 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
1(4): 2016/07/10(日)22:29 ID:??? AAS
このスレは
「こういうことをやりたいんだけどSQLでどう書くの?」
「こういうSQLを書いたんだけどうまく動きません><」
などの質問を受け付けるスレです。
SQLという言語はISOによって標準化されていますが
この標準を100%実装したDBMSは存在せず、
また、DBMSによっては標準でない独自の構文が
追加されていることもあります。
質問するときはDBMS名を必ず付記してください。
【質問テンプレ】
・DBMS名とバージョン
・テーブルデータ
・欲しい結果
・説明
前スレ:
SQL質疑応答スレ 16問目
2chスレ:db
973: 2018/01/01(月)16:20 ID:??? AAS
>>972
言葉足らずでごめん
日付でソートした際の1つ前のレコードから遡って1年間
A | 16-01-01 | 10
A | 16-11-01 | 20
これだと、1行目はこの前の時点のデータがないからNULLで、
2行目のは1つ前のレコードである16-01-01から遡って1年間を集計期間にしたい
974: 2018/01/01(月)21:04 ID:iMl2Nb4o(1) AAS
いきなり最終形にしようとするからわからないんだろうな。
975: 2018/01/01(月)21:30 ID:??? AAS
少しずつ実現するのが近道部品を組み立てる組み立てるつもりで考えてみよう
976: 971 2018/01/01(月)22:29 ID:??? AAS
SQLポンコツなんだ…
せめてヒントをくれるとありがたいです
977: 2018/01/01(月)22:36 ID:g9MeygUN(1/2) AAS
ID列でグループ化、日付列がcountで2レコード以上のレコードを取得して、日付が最小のレコードを取得する。
あなたのためにあえてSQLは書かない。
978(1): 2018/01/01(月)23:05 ID:??? AAS
>>971
sqlserverならこんな感じでできる
select * from (
select m.id ,m.日付,m.値,s.日付 as 最大値日付,row_number (partation by m.id,m.日付 order by m.値 desc) as 順
from テーブル as m
left join テーブル as s
on s.id = m.id
and s.日付 between deteadd (yy,-1,m.日付) and m.日付
) as mm
where 順 = 1
979: 2018/01/01(月)23:08 ID:g9MeygUN(2/2) AAS
ひどい例
980(3): 2018/01/02(火)02:01 ID:??? AAS
>>971
select *,
(select top 1 日付 from テーブル where テーブル.ID=前回の日付テーブル.id and テーブル.日付 <= 前回の日付テーブル.前回の日付 and テーブル.日付>DATEADD(yy,-1,前回の日付テーブル.前回の日付) order by 値 desc)
from(
select t.*,
(select top 1 日付 from テーブル where テーブル.ID=t.id and テーブル.日付 < t.日付 order by 日付 desc) as 前回の日付
from テーブル as t
) as 前回の日付テーブル
SQL Serverでやったけど、topと日付計算周りだけ直せば動くんじゃね
パーティション関数とかつかえるなら違う書き方もできるけど
>>978はtypo別にしてもいろいろ残念
981(2): 2018/01/02(火)10:42 ID:??? AAS
>>980
サブクエリにorder by使えないと思う
オラクルは使えるみたいだけど
982: 2018/01/02(火)11:12 ID:??? AAS
>>981
すいませんtop があればサブクエリでorderby 使える事知らなかった
983: 2018/01/02(火)11:16 ID:??? AAS
>>981
> サブクエリにorder by使えないと思う
SQL-Server 2005以降ならtopを指定してたら使える
984: 2018/01/02(火)11:29 ID:??? AAS
出来れば ostgres をベースに回答してやろうよ
985: 971 2018/01/02(火)15:04 ID:??? AAS
みなさまありがとうございます
相関サブクエリ?で値でソートしたあとの最初のレコードを取ってくれば良いんですね
チャレンジしてみます
986(2): 2018/01/02(火)16:06 ID:??? AAS
>出来れば ostgres をベースに回答してやろうよ
Postgres ?
なんでPostgresなのかね
テンプレに
【質問テンプレ】
・DBMS名とバージョン
ってあるのにそれを書かない質問者の不手際だろ
987: 2018/01/02(火)16:08 ID:??? AAS
>>986
Postgres使ってます
988: 2018/01/02(火)16:11 ID:??? AAS
>>986
971にpostgresって書いてあるけど、 オストグレスは知らんが
989: 2018/01/02(火)16:13 ID:??? AAS
テンプレ通りではないが、
>>971の最後の行に
>Postgres使ってます
こうあるので
990: 2018/01/02(火)16:14 ID:??? AAS
Symfowareでよろ
991: 2018/01/03(水)10:35 ID:X70UaZKX(1) AAS
>>980 みたいなのを真に受けるなよ
992(2): 2018/01/03(水)22:50 ID:??? AAS
具体的な問題点を指摘できんなら黙っとけや
993(1): 2018/01/04(木)12:53 ID:49+pCNSV(1/2) AAS
>>992
select
from (select
group by
having count(*) > 1)
where
994: 2018/01/04(木)15:47 ID:??? AAS
>>993
何が言いたいのかわからない
>>980はすくなくともSQL Serverなら正しく動いた
DBMSによってはサブクエリのorder byとtop(limit)が効かないかもしれんが
ポスグレがそうならそう指摘して正しく動くSQL示せば良い話
995: 2018/01/04(木)16:07 ID:49+pCNSV(2/2) AAS
なんでそんなクソSQLをごり押ししたいのか?
996: 2018/01/04(木)18:43 ID:F4EONRA7(1/3) AAS
>>992
select
from (select id, min(日付)
from テーブル
group by id
having count(*) > 1)
where
997: 2018/01/04(木)19:01 ID:??? AAS
お前要件取り違えてるだろ
998: 2018/01/04(木)20:10 ID:F4EONRA7(2/3) AAS
日付から考えるからおかしくなる。
これがプログラムならそういう順序では考えない。
質問者の「ソート」という言葉に惑わされてるんだろうな。
999: 2018/01/04(木)20:16 ID:F4EONRA7(3/3) AAS
正確にはIDでグループ化した日付のMAXと、IDでグループ化したcountの結果の比較だけど、初めから答え書く気はない。
1000: 2018/01/04(木)21:21 ID:??? AAS
ume
1001(1): 1001 Over 1000 Thread AAS
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 542日 22時間 52分 44秒
1002(1): 1002 Over 1000 Thread AAS
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
外部リンク:premium.5ch.net
▼ 浪人ログインはこちら ▼
外部リンク[php]:login.5ch.net
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.032s