我正在尝试从每个门户中仅选择一行(按日期排列的最后一行),但我遇到了 group by/distinct 问题
使用此代码,我只能选择我需要的 portalId,但没有任何数据
Select relNews.PortalId
from news
left join relNews on relNews.NewsId= news.NewsId
group by relNews.PortalId
当我在此代码中添加一个或多个数据列时,选择会带来所有信息,而不仅仅是每个门户的信息
Select relNews.PortalId, news.NewsId
from news
left join relNews on relNews.NewsId= news.NewsId
group by relNews.PortalId, news.NewsId
我知道这是我在这里遗漏的一个小技巧,但我就是不记得是什么......
更新
让我们为这个例子制作虚拟表。桌子是news
和relNews
(我在这里尽可能短)
表新闻
- 新闻ID
- 标题
- 描述
- 日期
表相关新闻
- RelNewsId
- 新闻ID
- PortalId
笔记:
- relNews 可以有
N
相同 NewsId 的寄存器 - 我需要为每个 portalId 选择最后一个寄存器(基于 news.Date)。
让我们说:
表新闻
- 新闻 ID == 1
- 标题 == '测试'
- 描述 == '测试'
日期 == '2013-01-01 00:00:00'
新闻 ID == 2
- 标题 == 'test2'
- 说明 == 'test2'
日期 == '2013-01-01 03:00:00'
新闻 ID == 3
- 标题 == 'test3'
- 说明 == 'test3'
- 日期 == '2013-01-02 00:00:00'
表相关新闻
- RelNewsId == 1
- 新闻 ID == 1
PortalId == 1
RelNewsId == 2
- 新闻 ID == 1
PortalId == 2
RelNewsId == 3
- 新闻 ID == 2
PortalId == 1
RelNewsId == 4
- 新闻 ID == 3
- PortalId == 3
该数据应带来:
RelNewsId == 2 ; RelNewsId == 3 ; RelNewsId == 4 ;
我可以用这段代码得到我想要的结果:
Select top 1 relNews.PortalId, news.NewsId, news.date
from news
left join relNews on relNews.NewsId= news.NewsId
where relNews.PortalId == 1
group by relNews.PortalId, news.NewsId
order by news.date desc
UNION
Select top 1 relNews.PortalId, news.NewsId, news.date
from news
left join relNews on relNews.NewsId= news.NewsId
where relNews.PortalId == 2
group by relNews.PortalId, news.NewsId
order by news.date desc
UNION
Select top 1 relNews.PortalId, news.NewsId, news.date
from news
left join relNews on relNews.NewsId= news.NewsId
where relNews.PortalId == 3
group by relNews.PortalId, news.NewsId
order by news.date desc
然后我得到所有 3 个结果。