declare cur cursor for select No,A from t order by No desc; declare exit handler for not found set done = 0; set done = 1; set _flag = 0; set _cnt = 0;
open cur; while done do fetch cur into _no, _a; if _a = 1 and _no > 0 then update t set b = 0 where No = _no + 1; set _cnt = _cnt + 1; else update t set b = _cnt where No = _no + 1; set _cnt = 0; end if; end while;
if _a = 1 then update t set b = 0 where No = _no; else update t set b = _cnt where No = _no; end if; close cur; end; 0324NAME IS NULL2018/05/13(日) 05:37:55.80ID:???>>322 ありがとうございます。 教えていただいたキーワードをもとに 調べてみます。
>>323 ありがとうございます。 今はPCをさわれる環境にないので月曜日に試してみたいと思います。 0325NAME IS NULL2018/05/13(日) 07:21:58.29ID:???>>322 再帰やストアドなんて要らんでしょ >>318 の結果を得たいだけなら
select T1.NO, T1.A, ( select min(T3.NO) as NO from T as T3 where T1.NO < T3.NO and T1.A <> T3.A ) - T1.NO as [連続数] from T as T1 inner join T as T2 on T1.NO - 1 = T2.NO and T1.a <> T2.a where T1.A = 1
で十分でしょ (わかると思うけど表名は T ね) 0326NAME IS NULL2018/05/13(日) 09:51:48.44ID:???>>325 ありがとうございます。 試してみます。 0327NAME IS NULL2018/05/13(日) 11:09:02.63ID:??? 再帰SQLでやるならこんな感じ 最初に1がでたところで表示したいとのことなので レコードの最後から加算積み上げてる 半角でレスしようとしたらインジョクションかなんかでエラーになった ため全角に変換してます
よろしくお願いします。 0335NAME IS NULL2018/05/17(木) 22:21:17.05ID:???>>334 で何をやりたいかはだいたいわかったけど (たぶん STARTしてからSTOPするまで KEKKAを1にすればよいはず) 行順を保持しつつ状態遷移させるのって普通のSQLでできるのだろうか? 0336NAME IS NULL2018/05/17(木) 22:27:50.57ID:??? START、START、STOP、STOPって並びになったときはどうすんの? 0337NAME IS NULL2018/05/17(木) 22:28:51.14ID:??? 334見てなかった、すまん 0338NAME IS NULL2018/05/17(木) 22:51:31.55ID:???>>334 スタートがあったら1加算ストップがあったら1減算する累積計算すればいいじゃねえ select no sum( start + end * -1) as kekka from t as m left join t as s on t.no<=m.no group by no 0339NAME IS NULL2018/05/18(金) 01:30:58.99ID:???>>338 いろいろ細かいミスは置いといて、それSTOPの行が1にならんだろ
>>329 select NO,START,STOP, (select isnull(sum(START),0) from t where t.NO <= m.NO)- (select isnull(sum(STOP),0) from t where t.NO < m.NO) KEKKA from t m とかで出来んじゃね 0340NAME IS NULL2018/05/18(金) 10:08:58.76ID:??? ありがとうございます。 皆さんに教えていただいた方法を試していますが、うまく行きそうです。 ありがとうございました。 0341NAME IS NULL2018/05/18(金) 17:13:55.57ID:??? ・DBMS名とバージョン 10.1.16-MariaDB
MySQLはよく知らんけど select code, date_format(bb_date, '%Y/%d'), sum( case baibai when 1 then -suuryou when 3 then suuryou end ) from data_pool group by code, date_format(bb_date, '%Y/%d') とかで行けるんじゃね? 0348NAME IS NULL2018/05/29(火) 14:04:09.72ID:??? date_format の所、%Y/%m だな。 2カ所直せば大丈夫だろう 03493442018/05/29(火) 14:07:06.19ID:??? 重ね重ねの間違いお恥ずかしいw 有難うございます %d を %m にして欲しい結果を得ることが出来ました。感謝 0350NAME IS NULL2018/05/31(木) 20:59:32.14ID:??? 毎日の果物の価格を記録するデータベースを作りたいんですがどういうテーブルをつくったらいいですか?とりあえずitemsテーブルに果物の種類とidのカラムを作ります。 毎日の価格はどういうテーブルにしたらいいですか? 0351NAME IS NULL2018/05/31(木) 21:13:08.20ID:???>>350
よろしくお願いいたします。 0379NAME IS NULL2018/06/24(日) 21:18:41.09ID:??? select 個人名, max(case カラム番号 when 1 then エラー end) as エラー1回目, max(case カラム番号 when 2 then エラー end) as エラー2回目, max(case カラム番号 when 3 then エラー end) as エラー3回目, max(case カラム番号 when 4 then エラー end) as エラー4回目, max(case カラム番号 when 5 then エラー end) as エラー5回目 from ( select 個人名, case when not エラーA is null then 'エラーA' when not エラーB is null then 'エラーB' when not エラーC is null then 'エラーC' end as エラー row_number() over ( partition by 個人名 order by 日付 asc, オーダ番号 asc) as カラム番号 from エラー履歴 ) group by 個人名 0380NAME IS NULL2018/06/25(月) 19:53:25.00ID:??? よろしくお願いします。 0381NAME IS NULL2018/06/25(月) 21:07:08.21ID:??? こちらこそよろしくお願いします。 0382NAME IS NULL2018/06/25(月) 22:01:22.79ID:???>>379 ありがとうございます!できました!!! どうしてこんなクエリが思いつくんですか。すげぇですね! 0383NAME IS NULL2018/06/26(火) 16:30:55.58ID:??? 質問です。 tableA id
Bの1レコードにたいして、Aの情報と、Cのcol1がnullでない数の情報が欲しいのですが、 LEFT OUTER JOINでどう書けばいいでしょうか?
SELECT t1.x, t2.x, t3.nullでない数 FROM B t1 LEFT OUTER JOIN A t2 ON t1.A.id = t2.id LEFT OUTER JOIN (SELECT COUNT(col1) AS nullでない数 FROM C WHERE Bid = t1.id) t3 ON t3.B.id = t1.id