Re: [請益] MySql select 不同時間的比較
※ 引述《yuleen123 (.......................)》之銘言:
: ※ 引述《sunz5010 (FoFo)》之銘言:
: : 我想select一段資料
: : 姓名|日期|分數
: : -----------------
: : 小明|12/1|80
: : 大華|12/1|70
: : -----------------
: : 小明|11/1|70
: : 大華|11/1|75
: : -----------------
: : 小明|10/1|60
: : 大華|10/1|80
: : 我想找出
: : 12/1分數>11/1分數>10/1分數 的人
: : 按照上面的數據、他應該會搜尋出小明
: : 因為小明(12/1,80)>(11/1,70)>(10/1,60)
: : 想請問一下、這樣子mysql的語法應該怎麼下呢
: 我照你的格式建了一張表來測試,如下
: mysql> select * from test01;
: +------+-------+-------+
: | name | date | score |
: +------+-------+-------+
: | AA | 12/01 | 80 |
: | BB | 12/01 | 70 |
: | AA | 11/01 | 70 |
: | BB | 11/01 | 75 |
: | AA | 10/01 | 60 |
: | BB | 10/01 | 80 |
: +------+-------+-------+
: 6 rows in set (0.00 sec)
: 使用以下的 SQL 敘述
: select
: name
: from
: test01 as m
: where
: (select score from test01 as a where date='12/01' and m.name=a.name) >
: (select score from test01 as b where date='11/01' and m.name=b.name)
: and
: (select score from test01 as c where date='11/01' and m.name=c.name) >
: (select score from test01 as d where date='10/01' and m.name=d.name)
: group by name
: 結果如下:
: +------+
: | name |
: +------+
: | AA |
: +------+
: 1 row in set (0.00 sec)
: 或許語法不是很高明,不過確實可以達成目的
我剛剛想了一下, 如果是要確認某個人是不是都一直進步,
那麼多加一個差值的欄位(每一次插入的時候跟上一次比較)是不是會有效率多了?
因為感覺上如果日期一多, 人一多, 暴力法一一比對很恐怖...
+------+-------+-------+------+
| name | date | score | diff |
+------+-------+-------+------+
| AA | 12/01 | 80 | 10 |
| BB | 12/01 | 70 | -5 |
| AA | 11/01 | 70 | 10 |
| BB | 11/01 | 75 | -5 |
| AA | 10/01 | 60 | 0 |
| BB | 10/01 | 80 | 0 |
+------+-------+-------+------+
如果多了一個差值欄位, 那就只要select所有的人當中diff沒有負值(也就是都>=0)
就會是所選的人了...
不知道這樣的做法有沒有其他瑕疵我沒考慮到的,
不過不能加欄位的話當我沒說, 也希望有前輩可以分享一下作法。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.248.106.146
→
02/25 23:22, , 1F
02/25 23:22, 1F
→
02/25 23:24, , 2F
02/25 23:24, 2F
→
02/25 23:27, , 3F
02/25 23:27, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 4 篇):
PHP 近期熱門文章
PTT數位生活區 即時熱門文章