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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

832閲覧

SQLについて質問です!抽出の仕方を教えてください。

kazupo

総合スコア12

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2018/10/30 03:19

編集2018/10/30 03:43

下記、抽出方法を教えてください。
テーブルは、users
カラム(関係ありそうな部分)は、id , sign_in_count ,current_sign_in_at
になります。


最新ログインが、本日の人。
最新ログインが、3日以内の人。
最新ログインが、1週間以内の人。

【補足】下記を試して見ました。
SELECT * FROM users
WHERE current_sign_in_at = now();


ログイン回数が多い上位5%
ログイン回数が多い上位5%<x≦10%

【補足】下記を試して見ました。
SELECT * FROM users
ORDER by sign_in_count DESC LIMIT 5 percent ;

上記お伺いできますと幸いです。

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

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

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

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

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

sazi

2018/10/30 03:26

DBMSは何ですか?MySQL?タグ付けて貰えますか。
dice142

2018/10/30 03:28

間違ってても構わないので調べてやってみたことを記載していただけますか?もしくは検索ワードとか。
kazupo

2018/10/30 03:35

SELECT * FROM users ORDER by CURRENT_DATE DESC LIMIT 5 percent ;
kazupo

2018/10/30 03:35

上記のようなやり方をためしてみました。
dice142

2018/10/30 03:37

質問文に追加していただけると他の回答者の方が参考にしやすいです。また、②の1つ目に対するもののようですが、他の問に関してはいかがでしょう?同様に質問文に書いていただけると助かります。
kazupo

2018/10/30 03:38

はい!ありがとうございます!追加します!
guest

回答2

0

ベストアンサー

既に回答ついてますが多分こんな感じかと。

追記
日付が時分秒含むみたいなので時分秒抜いて(日付部分とだけで)チェックするように変更

SQL

1//最新ログインが本日 2select * from users where DATE(current_sign_in_at)=DATE(NOW()); 3 4//〃3日以内 5select * from users where DATE(current_sign_in_at) between DATE(NOW()) - interval 3 day and DATE(NOW()); 6 7//〃1週間以内 8select * from users where DATE(current_sign_in_at) between DATE(NOW()) - interval 7 day and DATE(NOW());

SQL

1//ログイン回数上位5% 2SELECT * FROM 3(SELECT users.*, @counter := @counter +1 AS counter 4FROM (select @counter:=0) AS initvar, users 5ORDER BY sign_in_count DESC) AS X 6where counter <= (5/100 * @counter) ORDER BY sign_in_count DESC; 7 8//〃5%<x≦10% 9(省略) 10where counter > (5/100 * @counter) and counter <= (10/100 * @counter) 11ORDER BY sign_in_count DESC;

②はこちらを参考にしました。

投稿2018/10/30 04:44

編集2018/10/30 07:14
madoka9393

総合スコア992

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

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

0

①に関して

=は同じ時間である必要があるので、以内であれば[カラム名] <= [指定日時]のように
不等号で指定してあげたほうが良いです。
また、時間は無視した日付だけの比較であればdate()で日付のみ抽出すべきです。
http://kimagureneet.hatenablog.com/entry/2017/09/21/102628

②に関して

MySQLで上位xパーセントの取得は思いつかず、
とりあえずできそうなページを見つけたのでそれだけ貼っておきます。
https://stackoverflow.com/questions/4741239/select-top-x-or-bottom-percent-for-numeric-values-in-mysql

投稿2018/10/30 04:39

dice142

総合スコア5158

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問