簡體   English   中英

SQL查詢返回查詢中的最高日期值

[英]SQL Query return highest date value in query

我試圖運行查詢來執行以下操作:
返回給定日期范圍內表中的所有最新條目。
目前我正在使用此查詢

SELECT id FROM schedule WHERE eventdate BETWEEN '2014-09-01' AND '2014-09-07'

它返回下面顯示的計划表中的記錄1,2,3,4,5

時間表。

+----+------------+-------------+-----------------+------------+----------+
| id | eventdate  | resource_id |      text       |  added_on  | added_by |
+----+------------+-------------+-----------------+------------+----------+
|  1 | 2014-09-05 |           1 | Some old text   | 2014-08-01 | Sam      |
|  2 | 2014-09-05 |           1 | Some newer text | 2014-09-01 | Jordan   |
|  3 | 2014-09-06 |           1 | another day     | 2014-09-03 | Jordan   |
|  4 | 2014-09-05 |           1 | Most recent     | 2014-09-10 | Jordan   |
|  5 | 2014-09-07 |           2 | Other resource  | 2014-09-09 | Sam      |
+----+------------+-------------+-----------------+------------+----------+

我試圖只返回指定日期范圍內的唯一記錄,其中應返回的唯一記錄是在added_on列中具有最高日期時間戳的added_on

在上面的例子中,我想只返回記錄3,4,5。 記錄1和2已被記錄4取代。

**請注意: added_on列的類型為日期時間戳(yyyy-mm-dd HH:mm:ss),為清晰起見,已將其保留為**

我不知道查詢將返回的行數,確定記錄唯一性的信息是eventdate, resource_id and added_on
即,每天每個資源只應返回一條記錄,並且此記錄應具有最高的added_on值

SELECT s1.* FROM schedule s1  
inner join (select max(id) as id1 from schedule WHERE eventdate BETWEEN '2014-09-01' AND '2014-09-07' group by eventdate,resource_id ) as s2 on s2.id1=s1.id 

它會對你有用

注意:

你說你通過三列eventdate,resource_id和added_on來確定每一天的唯一性......但是你只想要每天最大的added_on ...所以不要按add_on .. group by eventdate分組來獲取白天的數據,按eventdate分組,resource_id按資源_id每天獲取數據。

嘗試獲取唯一ID,然后通過它們過濾外部查詢

SELECT * 
FROM schedule
WHERE ID IN
(   SELECT MAX(id) 
    FROM schedule 
    WHERE eventdate BETWEEN '2014-09-01' AND '2014-09-07' 
    GROUP BY eventdate, resource_id
)

demo1的

或者如果你想使用最高的added_on,你可以用同樣的方式

SELECT * 
FROM schedule
WHERE added_on IN
(   SELECT MAX(added_on) 
    FROM schedule 
    WHERE eventdate BETWEEN '2014-09-01' AND '2014-09-07' 
    GROUP BY eventdate, resource_id
)

DEMO2

如果你想擺脫使用IN並使用JOIN,你可以在MAX()上添加一個JOIN來實現。

SELECT * 
FROM schedule s
JOIN 
(   SELECT MAX(added_on) as added_on 
    FROM schedule
    WHERE eventdate BETWEEN '2014-09-01' AND '2014-09-07' 
    GROUP BY eventdate, resource_id
) t ON t.added_on = s.added_on

DEMO3

您需要獲取eventdate,resource_id,added_on的每個唯一組合的最新記錄,如下所示:

SELECT schedule.* 
FROM schedule JOIN (
   SELECT MAX(id) AS max_id 
   FROM schedule
   GROUP BY eventdate, resource_id, added_on
) t
ON t.max_id = schedule.id
WHERE eventdate BETWEEN '2014-09-01' AND '2014-09-07'

我認為這將是您可以擁有的最簡單的查詢。 如果您還有其他問題,請在此處發表評論

 SELECT MAX(id) , eventdate, Max(added_on) FROM schedule GROUP BY eventdate.

這將返回

+----+------------+------------+
| id | eventdate  |  added_on  | 
+----+------------+------------+
|  3 | 2014-09-06 | 2014-09-03 | 
|  4 | 2014-09-05 | 2014-09-10 | 
|  5 | 2014-09-07 | 2014-09-09 | 
+----+------------+------------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM