質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

解決済

1回答

2134閲覧

djangoでのデータの集計について

tobitti

総合スコア14

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

0クリップ

投稿2019/07/24 03:05

前提・実現したいこと

djangoで入退室システムを作っているが、ログの良い集計方法がわからない。

DB

登録時間 |名前|状態 2019-07-24 12:00| A |入室 2019-07-24 13:00| B |入室 2019-07-24 15:00| A |退室 2019-07-24 19:00| B |退室

こういう形でログがDBに記録されています。
このDBから、Aさんの入室していた間の時間を取得するには上のDBだと、3件目の退室と1件目の入室の時間差を求める必要があると思います。
(実際には同じ日に何度も出入りするなどDBは複雑になると思います。)
これらをどのようにして求めるのが良いのでしょうか?
また、一月の期間ごとの入室していた間の時間などを求めれたらなとも考えています。

modelのイメージ

from django.db import models # Create your models here. class Log(models.Model): created_at = models.DateTimeField( verbose_name='登録時間', auto_now_add=True, ) name = models.CharField( verbose_name='名前', max_length=50, blank=True ) status = models.CharField( verbose_name='状態', max_length=50, blank=True )

そもそもdjangoやDBを触るのはほとんど初めてなので、行いたいことに対してmodelの作り方が向いていないのかもしれません。
Django REST Frameworkを用いて、カードリーダー端末などから、APIにPOSTする形で現在はDBにログを記録しています。

modelの作りが悪いなど、集計方法以外での解決でも問題ありません。
詳しい方、ご教示いただけませんでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Aさんの退室時の場合 名前Aかつ状態入室の中で一番日時が新しいレコード を抽出すればいいと思いますね。

私ならもう一つ入室〜退室までの時間を記録する滞在時間テーブル(モデル)を作ります。

| id | stay_time | user_id(外部キー) | entry_time_id(外部キー) | exit_time_id(外部キー) |
| ---- | ---- | ---- | ---- |
| 1 | 2:00 | 1 | 1 | 2 |
| 2 | 4:00 | 1 | 3 | 4 |

これを作っておくと後から集計もしやすいと思います。

投稿2019/07/24 03:17

編集2019/07/24 03:45
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tobitti

2019/07/24 03:25

回答ありがとうございます。 このログから、一ヶ月の滞在時間を取得しようとした場合も、一ヶ月の期間の中で一件づつ見て『退室』の場合に同名の退室直前の入室を探して計算してを繰り返すという形で問題ないでしょうか?
退会済みユーザー

退会済みユーザー

2019/07/24 03:38

方針によりますがそれでも計算は可能でしょう。
退会済みユーザー

退会済みユーザー

2019/07/24 03:45

追記しました
tobitti

2019/07/24 03:57 編集

追記ありがとうございます。 退室の情報が送られてきたときに、滞在時間テーブルに情報を書いていくということですね。 確かに、このテーブルがあれば日や、月単位での集計も容易になりそうです。 ありがとうございます。
退会済みユーザー

退会済みユーザー

2019/07/25 07:02

> 退室の情報が送られてきたときに、滞在時間テーブルに情報を書いていくということですね。 その通りです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問