簡體   English   中英

獲取MySQL數據庫中每個ID的最新(日期)記錄

[英]Get the latest (date) record for every ID in the MySQL database

我正在將房屋中的人添加到數據庫中。 8月1日有人搬進1號房屋,8月5日有人搬進4號房屋,8月10日又有人搬進1號房屋。 我想在頁面上顯示的是住在8月9日和8月11日這樣的房子里的人。

數據庫示例:

employee----house-date
1-----------2-----01-01-2012
5-----------7-----01-01-2012
1-----------1-----01-08-2012
3-----------4-----01-01-2012
1-----------8-----01-09-2012

首先我嘗試

SELECT employee FROM habitants WHERE house='$house' AND date <= '$today' ORDER BY date DESC, employee ASC

但這顯示了一個人在多個房屋中(例如,當員工1有時更換房屋)

然后我嘗試

SELECT employee FROM habitants WHERE house='$house' AND date <= '$today' ORDER BY date DESC, employee ASC LIMIT 1

可是我每個房子只有一個人

然后我在MAX上找到了東西,所以我嘗試了

SELECT employee, MAX(date), house FROM habitants WHERE house='$house' AND date <= '$today' ORDER BY date DESC, employee ASC GROUP BY house

這導致以下錯誤:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY huis' at line 1

有人可以告訴我如何正確執行此操作嗎? 謝謝!

一種方法是使用子查詢並join

SELECT h.*
FROM habitants h JOIN
     (SELECT house, MAX(date) as maxd
      FROM habitants
      WHERE date <= '$today'
      GROUP BY house
     ) hh
     ON hh.house = h.house and hh.maxd = h.date
WHERE house = '$house'; 

您也可以將其寫為相關子查詢:

SELECT h.*
FROM habitants h
WHERE h.house = $house AND
      h.date = (SELECT MAX(date)
                FROM habitants h2
                WHERE h2.house = h.house and h2.date <= CURDATE()
               );

請注意,在大多數情況下,您無需傳遞當前日期。 CURDATE()提供當前日期(而NOW()是當前時間)。

編輯:

如果要查看員工的位置,則需要找到每個員工而不是住所的最長時間:

SELECT h.*
FROM habitants h
WHERE h.house = $house AND
      h.date = (SELECT MAX(date)
                FROM habitants h2
                WHERE h2.employee = h.employee and h2.date <= CURDATE()
               );

或者,或者:

SELECT h.*
FROM habitants h JOIN
     (SELECT employee, MAX(date) as maxd
      FROM habitants
      WHERE date <= '$today'
      GROUP BY employee
     ) hh
     ON hh.employee = h.employee and hh.maxd = h.date
WHERE h.house = '$house'; 

暫無
暫無

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

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