お世話になっております。
とあるログテーブルからデータを抽出する際、
日付でグルーピングをかけて集計した上、
カレンダーのような抽出結果にする必要があり、悩んでいます。
悩みどころは
・『データがない日付の場合も表示する』
・『SQL1本で出さなくてはならない』
です。
【サンプル】ログテーブル
--------------------
ログ日時 | 回数 |
--------------------
2006/07/01| 2 |
2006/07/03| 1 |
2006/07/05| 8 |
--------------------
上記テーブルから
ログ日時が2006/07/01から2006/07/05までのデータを取得した場合、
結果をこういう形で抽出したいのです。
--------------------
ログ日時 | 回数 |
--------------------
2006/07/01| 2 |
2006/07/02| |→ログテーブルにデータ無し
2006/07/03| 1 |
2006/07/04| |→ログテーブルにデータ無し
2006/07/05| 8 |
--------------------
データベースはsybase IQです。
なにか良い方法をご存知の方がいらっしゃいましたら
ご教示いただけませんか???
No.3ベストアンサー
- 回答日時:
Sybase IQでは、OUTER JOINはサポートされているのですよね?
事前準備として、カレンダー(7月なら、7月1日~31日)を管理するテーブルを作っておいて、ログの日付の情報とLEFT JOINさせた上でGROUP BYすれば、簡単な検索SQLで実現できます。
以下の例では、カレンダーを管理するテーブルには日付しか入れていませんが、休日を管理したり用途はいろいろあると思います。
1.表定義&データ例
create table user_calendar
(user_date date);
insert into user_calendar values('2006-7-1');
insert into user_calendar values('2006-7-2');
insert into user_calendar values('2006-7-3');
~中略~
insert into user_calendar values('2006-7-31');
2.ログ情報・・・既存のテーブル
create table log_table
(log_date date,
log_data varchar(100));
insert into log_table(log_date) values('2006-7-1');
insert into log_table(log_date) values('2006-7-3');
insert into log_table(log_date) values('2006-7-3');
insert into log_table(log_date) values('2006-7-3');
insert into log_table(log_date) values('2006-7-5');
insert into log_table(log_date) values('2006-7-5');
insert into log_table(log_date) values('2006-7-5');
insert into log_table(log_date) values('2006-7-5');
insert into log_table(log_date) values('2006-7-5');
3.検索SQL例
select user_date,count(log_date)
from user_calendar left join log_table
on user_date=log_date
group by user_date
order by user_date;
有難う御座います。
この方法で実装したところうまく行きました!
しかしその後、
クライアントから仕様変更の連絡があり、
データがある日だけ出せばOKということになりました。
それでも私の今後の開発にとても役立つお話でした。
有難う御座いました!
No.4
- 回答日時:
sybase IQにどのような関数があるのか知りませんので考え方だけ
レコードを作製するには種がいります
というこごで数字だけのテーブルを用意します
num
----
0
1
・
・
99 <-必要十分な大きさ+余裕まで
このテーブルからクエリを作り
ログ日時最小+num日という式フィールドを作り
抽出条件に<=ログ日時最大
とすればログ期間の抜けのないカレンダーが得られます
No.2
- 回答日時:
がると申します。
ちぃと補足になるのですが。
表示部分(俗にviewって呼ばれる場所ですね)で、直接DBのデータをfetchしてるわけではないんですよね?(もし直接やってるんだと…ちぃとインタフェースいじくったほうがよいように思われます)
基本的には「表示部分に渡すデータ」を細工になるので、Dbのfetch部分とデータを渡す部分の間に「欠落してる日付のデータを突っ込む」処理をaddするとよろしいのではないかと愚考いたします。
以上、何かの参考にでもなれば幸いです。
No.1
- 回答日時:
がると申します。
んっと…基本的に「ないデータを抽出する」ってのは、DBの基本的意義に反する要求だと思うのですが。
無論「表示部分で出したい」という要求は割合によくありえる話ではあるのですが、
・SQLでそれを処理する
必要はあるのでしょうか?
素直に「SQLでデータを抽出、プログラムでデータを処理」ではなにかまずいでしょうか?
回答ありがとうございます。
表示側のアプリケーションの問題で厳しいらしいのです。
やはり基本『無理』ですよね・・・。
説得して表示部分で何とかしてもらうようにします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- MySQL 複数DBテーブルからのデータ取得 3 2022/05/17 15:02
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- その他(データベース) IT用語について質問です。 以前ITパスポートの試験を受けた際にデータベースが何の集まりかについての 2 2022/12/10 12:29
- その他(開発・運用・管理) おんどとりWebStorage APIから温度情報を取得し表示したい 2 2023/08/03 09:53
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- Excel(エクセル) Excelの関数でこんな処理ができますか 1 2023/02/08 13:46
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
一つ前に戻るには…
-
【ストアドプロシージャ】条件...
-
外部キー、親を調べるにはshow ...
-
MySQLのテーブル設計について
-
mysqlのフィールド名
-
SQL一発でカレンダー表示は可能...
-
PHP上のSQLで、SELECT文をいく...
-
Accessでデータシートに同じデ...
-
他のデータベースとのテーブル結合
-
SELECT 文の NULL列は?
-
Accessのテーブルデータを一気...
-
テーブルリンク リンク元を知...
-
SQL*LoaderでCSVから指定した列...
-
テーブル名をカラムとして取得...
-
外部キーだけのテーブル(主キ...
-
L2SWはARPテーブルを持っている?
-
結合テーブルでINSERTする方法...
-
「テーブルに座って……」という...
-
SQLでUPSERTを一度に複数行やる...
-
テーブルに存在しない列をselec...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
一つ前に戻るには…
-
mysqlのフィールド名
-
最大値を持つレコードを削除したい
-
mysqlでJOIN文
-
1列について重複行を除いて全列...
-
グループからランダムに抽出す...
-
mysqlで外部キーをつけたカラム...
-
SQL一発でカレンダー表示は可能...
-
矛盾していないでしょうか?
-
ビューに追加・削除が出来ません。
-
1000万件のデータをmysqlで効率...
-
テーブルが作成できない
-
挿入先テーブルに存在しないレ...
-
【ストアドプロシージャ】条件...
-
SQL内でループさせるような検索文
-
MySQL INSERT文 エラー
-
mysqlのデータベースを復元した...
-
Waiting for table lockエラー...
-
PHP上のSQLで、SELECT文をいく...
-
複数の列にまたがってユニーク...
おすすめ情報