Yellow 發問時間: 電腦與網際網路程式設計 · 1 0 年前

sql去除重覆資料抓取問題

表格A的資料如下:

no m_no ip_addr ba_date

1 2   127.0.0.1     2010-07-31 08:00:41

2 2   127.0.0.1     2010-07-31 08:01:48

3 4   220.136.20.171   2010-07-31 23:25:52

4 4   220.137.141.132  2010-08-01 21:57:48

5 8   220.136.20.171   2010-08-01 23:25:52

我用了sql語法後取出如下:

select count(m_no) as total,m_no from A group by m_no

m_no total

2  2

4  2

8  1

希望取出後將【同日】且【IP重覆】的資料去除結果如下:

m_no total

2  1

4  2

8  1

但不知道語法該怎麼下

麻煩sql的高手們能為我解答我的疑問,謝謝!

2 個解答

評分
  • CY
    Lv 5
    1 0 年前
    最佳解答

    資料數量大時 子查詢會慢一點

    試試 count (distinct field_name)

    select count(distinct ip_addr) as total,m_no from A group by m_no

    2010-08-13 00:58:03 補充:

    流浪玩家說的對

    多謝指正

    改正如下

    select count(distinct substr(ba_date, 1, 10), ip_addr) as total,m_no from A group by m_no

  • 1 0 年前

    我提供給您我的作法:

    SELECT `m_no` , COUNT(*) AS `total` FROM (SELECT `m_no` FROM `table_a` GROUP BY `ip_addr` , date(`ba_date`) , `m_no`) AS t GROUP BY `m_no`

    請將 table_a 換成您的 table 名稱。

    而我的問題是為何會有同一天而且又相同 ip 的資料存在於資料庫呢?

    2010-08-06 12:20:36 補充:

    本題的最佳解答與題意似乎有些不符( "同日" 且 "IP重覆"),

    只要把 no = 1 or no = 2 其中一筆的日期改掉,

    產生的結果集與日期未被修改的完全一樣,

    所以可能與題意有些不合。

    參考資料: 自己 & MySQL 官網
還有問題?馬上發問,尋求解答。