从数据库中获取最新的条目

k3fezbri  于 2021-06-23  发布在  Mysql
关注(0)|答案(5)|浏览(259)

我有四个表格,分别是分配表、用户表、车辆表和燃料表。我想做一个查询,返回唯一的行(也就是说,除了users表之外,每个表应该只有一个唯一的id)。
我希望查询返回最新的条目(比如最后一个条目)。
我当前的查询在下面,但它返回它找到的第一行,而不是最后一行

Select distinct
     v.vname,
     v.year,
     v.make,
     v.model,
     v.vid,
     v.fueltype, 
     f.fID,
     f.meter,
     f.date,
     a.driverID,
     a.dateassigned,
     u.uid,
     u.name,
     u.surname
 from
     vehicles as v,
     assigns as a,
     users as u, 
     fuel as f
 where
     v.vid = a.vID
 and
     a.driverID = u.id
 and
     v.vid = f.vID
 group by
     v.vid
 order by
     f.date desc

如何使用这些表从数据库中获取最后一个条目?

vd8tlhqk

vd8tlhqk1#

请尝试以下代码并限制:

Select distinct
     v.vname,
     v.year,
     v.make,
     v.model,
     v.vid,
     v.fueltype, 
     f.fID,
     f.meter,
     f.date,
     a.driverID,
     a.dateassigned,
     u.uid,
     u.name,
     u.surname
 from
     vehicles as v,
     assigns as a,
     users as u, 
     fuel as f
 where
     v.vid = a.vID
 and
     a.driverID = u.id
 and
     v.vid = f.vID
 group by
     v.vid
 order by
     f.date desc 
 limit 1
4nkexdtk

4nkexdtk2#

Select distinct     
      v.vname,     
      v.year,     
      v.make,     
      v.model,     
      v.vid,      
      v.fueltype,       
      f.fID,     
      f.meter,     
      f.date,      
      a.driverID,     
      a.dateassigned,     
      u.uid,     
      u.name,     
      u.surname from vehicles as v, 
      assigns as a, 
      users as u, 
      fuel as f where v.vid = a.vID and 
      a.driverID = u.id and v.vid = f.vID 
      group by v.vid  
      order by f.date desc 
      limit 1

有什么问题,请留言。

uplii1fm

uplii1fm3#

我推测你想要的是以下几点:

SELECT
    v.vname,
    v.year,
    v.make,
    v.model,
    v.vid,
    v.fueltype, 
    f1.fID,
    f1.meter,
    f1.date,
    a.driverID,
    a.dateassigned,
    u.uid,
    u.name,
    u.surname
FROM vehicles v
INNER JOIN assigns a
    ON v.vid = a.vID
INNER JOIN users u
    ON a.driverID = u.id
INNER JOIN fuel f1
    ON v.vid = f1.vID
INNER JOIN
(
    SELECT vID, MAX(date) AS max_date
    FROM fuel
    GROUP BY vID
) f2
    ON f1.vID = f2.vID AND f1.date = f2.max_date
ORDER BY
    f1.date DESC;

这个查询只是对一个子查询进行一个附加的连接,该子查询为每辆车查找最近的日期。这将通过删除每辆车的所有非最新记录来限制您当前的查询。
请注意,我已将旧式隐式联接转换为显式内部联接。这是目前编写sql查询的首选方法。

ulydmbyx

ulydmbyx4#

Select 
     v.vname,
     v.year,
     v.make,
     v.model,
     v.vid,
     v.fueltype, 
     f.fID,
     f.meter,
     f.date,
     a.driverID,
     a.dateassigned,
     u.uid,
     u.name,
     u.surname
 from
     vehicles as v,
     assigns as a,
     users as u, 
     fuel as f
 where
     v.vid = a.vID
 and
     a.driverID = u.id
 and
     v.vid = f.vID
 order by
     v.id desc 
 limit 1

如果您的表以id作为主键,那么上面的sql将起作用。

oyt4ldly

oyt4ldly5#

我不认为这是你现在想要的,但我只想在下次你创建数据库时把它扔到那里。这件事很容易解决拉威尔在它的方法。只需创建两个数据库字段 created_at 以及 updated_at .
这两个字段都是时间戳和 created_at 创建项目时更新 updated_at 当试图更新数据库中的任何字段时更新。通过这种方式,您可以在创建或更新数据库时获取数据库中的最新记录。
由于两个时间戳相互碰撞的可能性很小甚至没有,所以几乎总是会得到一个结果。您还可以根据创建或更新的时间戳按这种方式对记录进行排序。

相关问题