我有3张桌子。 1是FORUM,2是CURRENT,3是ARCHIVE。
每个论坛都可以在CURRENT和ARCHIVE表中都有条目。 CURRENT和ARCHIVE完全相同。
FORUM感兴趣的专栏是FORUM_NAME
和FORUM_NUMBER
。
CURRENT和ARCHIVE中感兴趣的列是ENTRY_NUMBER
,FORUM_NUMBER
,MOD_DATE
。
下面的查询返回每个在CURRENT表中有行的论坛的最新MOD_DATE。
select max(c.mod_date), f.forum_name, f.forum__number
from forum f, current c
where f.forum_number=c.forum_number
group by f.forum_name, f.forum_number order by max(c.mod_date) desc;
如何配置此选项以查询当前的AND存档表,并为每个论坛返回单个最新的mod_date,而不管哪个表具有该论坛的最新mod_date?
感谢。
答案 0 :(得分:0)
我会尝试将两个表查询的并集作为内部选择,然后在外部选择中按顺序排列。 Imho这应该是可行的。
答案 1 :(得分:0)
另一个样本,用于更好地对互联网表进行非规范化处理。我会在论坛表中为LatestCurrent和LatestArchive添加两列。当条目被添加到每个相应的条目时,有一个触发器,用相应的最新日期列更新论坛表。您甚至可能需要最新的当前/存档的ID,这样您就可以立即加入这些表,而无需每次查询都执行MAX()。
现在,正如所说,你需要像
这样的东西select
f.forum_name,
f.forum__number,
case when CurMax.maxCurrent >= ArchMax.maxArchive
then CurMax.maxCurrent
else ArchMax.maxArchive end as MaxDate,
case when CurMax.maxCurrent >= ArchMax.maxArchive
then "Current"
else "Archive" end as MaxSource
from
forum f
LEFT JOIN ( select c.forum_number,
max(c.mod_date) maxCurrent
from current c
group by c.forum_number ) CurMax
on f.forum_number = CurMax.forum_number
LEFT JOIN ( select a.forum_number,
max(a.mod_date) maxArchive
from archive a
group by a.forum_number ) ArchMax
on f.forum_number = ArchMax.forum_number
order by
CurMax.maxCurrent DESC