5

私は多くのボード ゲームをプレイし、いくつかの統計を追跡するサイト/データベースを維持しています。テーブルの 1 つは、さまざまな時間を追跡します。その構造は次のようになります。

  • gameName (テキスト - ボードゲームの名前)
  • numPeople (int - プレイした人数)
  • timeArrived (タイムスタンプ - ゲームをプレイしている家に到着した時刻)
  • beginSetup (タイムスタンプ - ゲームのセットアップを開始する時刻)
  • startPlay (timestamp - 実際にゲームを開始した時刻)
  • gameEnd (タイムスタンプ - ゲーム終了時刻)

基本的に、私がやりたいことは、これらの時間を使用して、興味深い/有用な情報を取得することです (セットアップに平均で最も時間がかかるゲームはどれか、プレイするのに平均で最も時間がかかるゲームはどれか、どのゲームから最も時間がかかるかなど)通常、私は PHP に頼りすぎており、select * ... を実行してすべての時間を取得し、PHP の計算を行ってすべての統計情報を見つけますが、MySQL ができることを知っていますクエリを使用してこれらすべてを実行してください。残念ながら、より複雑なクエリになるとかなり迷ってしまうので、助けてほしいです。

いくつかのクエリの例が欲しいのですが、誰かが私を始めたら、他の平均時間クエリを見つけられることを願っています. 平均してボード ゲームをプレイする時間が最も長いクエリはどのようになりますか? 平均して最速のゲーム/セットアップ時間はどうですか?

追加情報: draw010 - 素晴らしいスタートを切ることができましたが、期待した結果が得られません。いくつかの実際の例を示しました... 私は Harper というゲームを持っていて、それを 2 回プレイしました (したがって、データベースには 2 つの記録があり、時間全体が記録されています)。時間は次のようになります。

beginSetup(1) = 2012-07-25 12:06:03
startPlay(1) = 2012-07-25 12:47:14
gameEnd(1) = 2012-07-25 13:29:45

beginSetup(2) = 2012-08-01 12:06:30
startPlay(2) = 2012-08-01 12:55:00
gameEnd(2) = 2012-08-01 13:40:32

次に、提供されたクエリを実行すると(秒を時間/分/秒に変換します)、次の結果が得られます(申し訳ありませんが、あなたが行ったクールなテーブルの実行方法がわかりません):

gameName = Harper
Total Time = 03:34:32
...and other incorrect numbers.

数値から、平均合計時間は 3 時間 34 分ではなく、約 1 時間 24 分になるはずです。間違った数字が表示される理由は何ですか?

4

2 に答える 2

6

Here is a query to get the average setup time and play time for each game, hope it helps:

SELECT
  gameName,
  AVG(UNIX_TIMESTAMP(startPlay) - UNIX_TIMESTAMP(beginSetup)) AS setupTime,
  AVG(UNIX_TIMESTAMP(gameEnd) - UNIX_TIMESTAMP(startPlay)) AS gameTime,
  AVG(UNIX_TIMESTAMP(gameEnd) - UNIX_TIMESTAMP(beginSetup)) AS totalTime,
FROM `table`
GROUP BY gameName
ORDER BY totalTime DESC;

Should yield results similar to:

+----------+-----------+-----------+-----------+
| gameName | setupTime | gameTime  | totalTime |
+----------+-----------+-----------+-----------+
| chess    | 1100.0000 | 1250.0000 | 2350.0000 |
| checkers |  466.6667 |  100.5000 |  933.3333 |
+----------+-----------+-----------+-----------+

I just inserted about 8 test rows with some random data so my numbers don't make sense, but that is the result you would get.

Note that this will scan your entire table so it could take a while depending on how many records you have in this table. It's definitely something you want to run in the background periodically if you have a considerable amount of game records.

于 2012-08-01T20:34:30.437 に答える
1

For something like how long it took to set up you could write something like:

SELECT DATEDIFF(HOUR, BeginSetup, StartTime) -- in hours how long to set up
于 2012-08-01T20:34:44.787 に答える