1. 程式人生 > >GROUP BY 條件查詢最新時間記錄

GROUP BY 條件查詢最新時間記錄

概述:

最近專案一個查詢需求是從一個表中同一個IP多條記錄的只獲取一條IP記錄,而這條IP記錄要最新的。很明顯需求沒什麼難,分組當然想到的是group by,但是這裡是有個時間條件篩選的。雖然網上很多答案,但是我發現實際操作上是沒有生效的,不知道是MYSQL版本問題還是答主們只是理論而沒有實際嘗試過,這裡分享一下我的處理方式。

準備:

1、首先看我準備了同一個IP兩條資料,時間不一樣的。
這裡寫圖片描述
2、然後我們嘗試一下,直接group by 獲得的是哪一條資料。
這裡寫圖片描述
3、從上圖可知,分組是實現了,但是並不是自己想要的最新時間的那條記錄。到此,如果你嘗試從網上搜索具體的解決方法,你會發現大多數答主會告訴你,對group by 的表先進行時間排序作為子查詢提供給group by 就能解決。大多數答案如下圖。
這裡寫圖片描述


那麼如果我們按照這答案調整SQL再查詢一次呢?
這裡寫圖片描述
到這裡就傻眼了吧?說好的能解決問題呢?甚至答主連搜尋結果截圖都給出來了,可自己為什麼就還是沒有得到想要的結果呢?我猜可能是版本問題吧。我這裡的版本是
這裡寫圖片描述
4、那麼我們分析一下需求和解決方法吧,我們需要的是最新時間,強調的是一個“最”,那麼聰明的你想到了什麼了沒有?對!就是聚合函式max(),我們可以分步來,先查分組每個IP的最新時間再根據最新時間作為條件進行條件搜尋就好。
查分組每個IP的最新時間子查詢:
這裡寫圖片描述
然後組合語句:
這裡寫圖片描述
以上就是我的答案,不過以上答案我是為了方便您們理解只用了一個IP進行查詢,那麼我們再看看如果這樣的方法在多個IP中會不會失效。
表中的資料:
這裡寫圖片描述

其他答主不生效的方法試一下,以防冤枉別人了:
這裡寫圖片描述
很遺憾,還是不行!
我的方法:
這裡寫圖片描述
最終多個IP測試也是成功的。

總結:

網上搜索出來別人的答案,儘管別人截圖都有了,但是還是有可能不適合自己的,關鍵是自己會思考改進。同時,我這方法可能不是最簡潔的SQL,我希望我這裡能起到一個拋磚引玉的作用,有更好答案的您們,歡迎留言交流!!!

修正:

感謝評論區的網友指出當兩個ip時間相同時,會因為查詢max_time的子查詢查出來的資料重複,從而導致最終查出來的結果也是重複的,針對該問題,目前想到的解決方法是加多一層分組來處理max_time的重複,如下圖:
這裡寫圖片描述
如果有更好的方法,歡迎提出指導。

相關推薦

GROUP BY 條件查詢最新時間記錄

概述: 最近專案一個查詢需求是從一個表中同一個IP多條記錄的只獲取一條IP記錄,而這條IP記錄要最新的。很明顯需求沒什麼難,分組當然想到的是group by,但是這裡是有個時間條件篩選的。雖然網上很多答案,但是我發現實際操作上是沒有生效的,不知道是MYSQ

資料庫排名sql,group by 分組查詢按照時間最大值

先給出類似的簡單表 DROP TABLE IF EXISTS `TouTiaoAnchor`; CREATE TABLE `TouTiaoAnchor` ( `HourId` int(10) unsigned NOT NULL, `BetinTime` varcha

Group by 分組查詢 實戰

男女 img 通過 ont rom 出現的次數 是我 實現 一起 實戰經歷,由於本人在共享單車上班,我們的單車管理模塊,可以根據單車號查詢單車,但是單車號沒有設置unique(獨一無二約束),說以這就增加了單車號可能重復的風險,但是一般情況下,單車號是不會重復的,因為平

mysql按日期分組(group by查詢統計的時候,沒有數據補0的解決辦法

details map對象 有一個 end creat 對象 結果 插入 數據返回 轉載自:http://blog.csdn.net/jie11447416/article/details/50887888 1、案例中的數據結構和數據如下 2、在沒有解決的時候,是這樣的

MySQL Crash Course #06# Chapter 13. 14 GROUP BY. 子查詢

idt rom pla most con height bsp them 找到 索引 理解 GROUP BY 過濾數據 vs. 過濾分組 GROUP BY 與 ORDER BY 之不成文的規定 子查詢 vs. 聯表查詢 相關子查詢和不相關子查詢. 增量構造復雜

SQL group by分組查詢

create server insert 一定的 ID all 註意 至少 滿足 本文導讀:在實際SQL應用中,經常需要進行分組聚合,即將查詢對象按一定條件分組,然後對每一個組進行聚合分析。創建分組是通過GROUP BY子句實現的。與WHERE子句不同,GROUP BY

mysql使用group by丟資料問題的記錄

上週在做一個數據庫關聯查詢的時候遇到一個很奇怪的問題 我的場景是這樣的 主要有3張表 a表主要是a.id b表與a表使用a.id和b.aid一一對應,包含其他內容 c表?與a表是多對一的關係,一個a.id對應多個c.id 我現在需要看一下一個aid對應了多少個cid同時把

Group By語句查詢實時資料

根據一天內按照小時為間隔實時資料統計每小時的資料量,可以與echarts結合,小時做X軸資料做Y軸 – 查詢當天 SELECT DATE_FORMAT(t.extract_time, ’ %k時’)AS dates , sum(rows) AS all_rows FROM

在entity framework 中使用 LINQ 對錶進行左關聯查詢group by 分組查詢的示例,並且按小時分組查詢時間段

有表RealTimeDatas的欄位RecordTime儲存了實時時間,格式為DateTime 現在需要以小時進行分組統計每個時間段的最大值,最小值,和平均值 同時,另一個表Devices中有標準溫度溼度最大最小值範圍,需要將這個結果一併關聯到查詢結果中    

Mysql5.7版本group by查詢中order by 無效的問題解決辦法

我們都知道group by 會選擇保留第一條資料,預設是按照id排序的,如果我們想通過別的欄位排序,比如最後建立的那條記錄,可以先按照建立時間降序,再group by即可得到每個分組的最新建立的資料。 例: 通過如下sql查出兩條資料 SELECT * FROM xxx WHERE gr

mysql按日期分組(group by查詢統計的時候,沒有資料補0的解決辦法

寫部落格真實個費時費力的差事,好佩服那些部落格閱讀幾十上百萬的人。今天研究了半天按照日期分組統計,沒有資料就為空了,我要讓他顯示0呀。想了辦法,都沒有找到一個好的,解決方案,然後用了一個很low的方法實現了,還是把它記錄下來。方法是用於MySQL,與開發語言無關。 1、案例中的資料結構和資料如下 2、

使用GROUP BY的時候如何統計記錄條數 COUNT(*) DISTINCT

INSERT INTO `test_users` (`email_id`, `email`, `passwords`) VALUES (1, ‘[email protected]', ‘1e48c4420b7073bc11916c6c1de226bb'), (2, ‘[email p

mysql按日期分組(group by查詢統計的時候,沒有資料補0的解決辦法。

寫部落格真實個費時費力的差事,好佩服那些部落格閱讀幾十上百萬的人。今天研究了半天按照日期分組統計,沒有資料就為空了,我要讓他顯示0呀。想了辦法,都沒有找到一個好的,解決方案,然後用了一個很low的

C++中 MFC DLL如何連線mysql資料庫以及按條件查詢時間的比較

1.把mysql資料庫的以上檔案複製到 “右鍵點選專案名——》在檔案資源管理器中開啟資料夾”中。 2.右鍵點選專案名——》新增——》現有項,選中從mysql複製過來的所有檔案,點選新增。 3.可以寫程式碼了。 extern "C" bool PASCAL EXPORT q

Java Dao實現group by 分組查詢功能

前言 今天要實現一個功能,去資料庫查詢一個欄位,查出該欄位有幾個不同的值,以及每個值有多少條記錄。我想到的是group by分組查詢功能,以前雖然學習過,但是沒具體去實踐,沒想到今天實現過程中糾結了很久,我把遇見的問題記錄下來供參考 實現效果 實現

記一次神奇的sql查詢經歷,group by查詢優化

一、問題背景 現網出現慢查詢,在500萬數量級的情況下,單表查詢速度在30多秒,需要對sql進行優化,sql如下: 我在測試環境構造了500萬條資料,模擬了這個慢查詢。 簡單來說,就是查詢一定條件下,都有哪些使用者的。很簡單的sql,可以看到,查詢耗時為37秒。 說一下app_account欄位

group by查詢每組時間最新的一條記錄

詳細 describe 技術 .html location 取數 時間 index net 錯誤寫法,having time = max(time)在分組之後執行,查詢出來只有一條滿足條件的數據。having過濾的是組,在order by之後執行 se

MYSQL GROUP BY查詢,結果只取最新一條記錄

mysql 用 group by 查詢時,會自動保留   對應組 ‘最先搜尋出來的資料’,但這時資料可能不是最新的 如何設定保留 對應組‘最後搜尋出來的資料’ 呢?詳見程式碼 select * f

MySQL——關於MySQL分組查詢group by和order by獲取最新時間內容的方法

假如現在有一張表table,如下: 如果我們想查詢出來zhang和wang最新日期的記錄 如果我們直接使用: SELECT * FROM table GROUP BY name ORDER BY

SQL重復記錄查詢-count與group by having結合查詢重復記錄

nbsp 根據 iteye sele rul 判斷 select pro .net 查找表中多余的重復記錄,重復記錄是根據單個字段(peopleId)來判斷select * from peoplewhere peopleId in (select peopleId fr