我有一张桌子,用于记录车辆入口/出口到建筑物。我在显示数据时使用以下过程对进入/退出的existsind日期进行排序,但是它会导致重复的行?有谁知道如何删除重复项?
select id, plate,log_entry,log_exit,logged_by,driver_name,remarks,carimage,flagged
from ((select *, log_entry as filterdate
from vehicle_log
) union all
(select *, log_exit as filterdate
from vehicle_log
)
) thelog
where
((log_entry >= _startDate and log_entry <= _endDate) or (log_exit >= _startDate and log_exit <= _endDate))
and plate like concat('%', _plateNumber, '%')
and driver_name like concat('%', _driverName, '%')
order by filterdate desc;
谢谢!
答案 0 :(得分:0)
你需要解释你想要实现的目标。您正在使用UNION
对log_entry
和log_exit
进行排序,就像一个字段一样。很公平,我真的不知道这与简单地将log_entry
和log_exit
排序为两个单独的字段有什么不同。因此,除非你对此有一个很好的解释,否则我说最好的答案是:
SELECT id, plate, log_entry, log_exit, logged_by, driver_name, remarks, carimage, flagged
FROM vehicle_log
WHERE ((log_entry >= _startDate AND log_entry <= _endDate)
OR (log_exit >= _startDate AND log_exit <= _endDate))
AND plate LIKE CONCAT('%', _plateNumber, '%')
AND driver_name LIKE CONCAT('%', _driverName, '%')
ORDER BY log_entry DESC, log_exit DESC;
您对上次评论的 编辑:要将log_entry
和log_exit
列合并为一列以进行过滤,并假设它们不能同时为{{1}试试这个:
NULL
这是fiddle。
如果您想要SELECT id, plate, log_entry, log_exit
FROM #vehicle_log
ORDER BY (CASE WHEN log_entry IS NULL THEN log_exit ELSE log_entry END) DESC;
中的合并字段,请尝试以下操作:
SELECT
这是fiddle。
答案 1 :(得分:0)
看起来这个查询被设计为给出两行,一行用于输入时间,另一行用于退出时间 - 输出到名为filterdate的列。
通过删除联合以及对退出时间进行排序可以大大简化此查询 - 这是我假设你的事后
select id, plate,log_entry,log_exit,logged_by,driver_name,remarks,carimage,flagged
from vehicle_log
where ((log_entry >= _startDate and log_entry <= _endDate)
or (log_exit >= _startDate and log_exit <= _endDate))
and plate like concat('%', _plateNumber, '%')
and driver_name like concat('%', _driverName, '%')
order by log_exit desc;
答案 2 :(得分:-1)
为什么不使用distinct?选择不同的ID ...