我有四个表用于分配,用户,车辆和燃料。我想创建一个返回唯一行的查询(可以说,除了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
如何使用这些表从数据库中获取最后一个条目?
答案 0 :(得分:0)
尝试下面的限制代码:
@PostMapping(path = "/price-menu", consumes = "application/json", produces = "application/json")
答案 1 :(得分:0)
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
有任何问题,请发表评论。
答案 2 :(得分:0)
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就可以了。
答案 3 :(得分:0)
我不认为你现在想要的是什么,但我只想在下次创建数据库时把它扔到那里。这个问题可以通过 laravel 在其方法中轻松解决。只需创建两个数据库字段created_at
和updated_at
。
当您创建项目时,这两个字段都是时间戳和created_at
更新,而updated_at
在尝试更新数据库上的任何字段时更新。
这样,您可以在创建或更新数据库时获取最新记录。
由于两个时间戳相互碰撞的可能性很小,因此几乎总能获得一个结果。您也可以根据创建或更新的时间戳以这种方式订购记录。
答案 4 :(得分:0)
我猜测你想要的是以下内容:
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查询的首选方法。