从多家公司的表格中获取最新发布的新闻

时间:2014-07-01 13:08:22

标签: mysql

这是我的新闻表:

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'

3 个答案:

答案 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;