这是我的新闻表:
id | company_id | published
1 | 1 | 2014-06-20
2 | 1 | 2014-06-19
3 | 2 | 2014-06-12
我想获得每家公司的最新发布项目。 1个查询可以实现吗?我试过这样的事情:
SELECT DISTINCT(`company_id`), id, published
FROM `newsitems`
ORDER BY `published` DESC
这就是我想要的结果:
id | published
1 | 2014-06-20
3 | 2014-06-12
公司表结构:
id | companyname | status
1 | 'name1' | 'active'
2 | 'name2' | 'active'
3 | 'name3' | 'active'
答案 0 :(得分:1)
这里的问题是保留id和已发布的组合。您的样本数据太简单,无法看出差异。这是应该工作的东西,但看起来有点难看。可能有更好的东西: - )
SELECT id, published FROM newsitems
WHERE concat(published, "_", id, "_", company_id) IN (
SELECT max(concat(published, "_", id, "_", company_id))
FROM newsitems
GROUP BY company_id
)
ORDER BY id
尝试使用此示例数据:
id | company_id | published
1 | 1 | 2014-06-20
2 | 1 | 2014-06-19
3 | 2 | 2014-06-12
4 | 1 | 2014-06-21
5 | 2 | 2014-06-13
6 | 2 | 2014-06-11
结果应该是:
id | published
4 | 2014-06-21
5 | 2014-06-13
这就是你告诉我们你想要的。对于这种情况,不需要公司表。要对公司名称或公司状态执行某些操作,您必须加入表格。
答案 1 :(得分:0)
以下SQL应该是正确的:
SELECT `company_id` As `id`, `published`
FROM `newsitems`
GROUP BY `company_id`
ORDER BY `published` DESC, `id` DESC
id DESC
用于获取最新的newsitem,如果两个条目中的发布日期相同。
答案 2 :(得分:0)
加入两个表并按发布的最大日期排序。
select n.id, MAX(n.published) From
newsitems n leftjoin company c on n.company_id = c.id
ORDER BY MAX(n.published) DESC;