【问题标题】:MYSQL return all fields based on multiple conditions AND distinct on single column butMYSQL 根据多个条件返回所有字段,并且在单个列上不同,但是
【发布时间】:2021-08-08 13:10:58
【问题描述】:

我有一个如下的 event_table。

city    country event       date
london  UK      Soccer      8/20/2010
toronto CA      Basketball  8/12/2011
newyork US      Basketball  8/21/2012
LA      US      Basketball  8/30/2013
.....

我需要获取所有符合这些条件的字段:

  1. 仅 30 个条目
  2. event = "棒球"
  3. 按日期排序
  4. 不同的国家“美国”。

我在下面尝试过:

select distinct on country * 
from event_table
 where event="Basketball" 
 order by   date Dec limit 20;

及以下:

select * 
from event_table 
where event="Basketball" 
order by    date Dec limit 20 
group by country;

但没有工作。提前感谢您的帮助。

【问题讨论】:

  • 不同国家是什么意思?只有一个国家?
  • 是的,我每次只想回一个国家。
  • 你的最后一条 SQL 语句对我来说看起来没问题,除了我记得的限制应该在语句的末尾。结果有什么问题?
  • 哪个mysql版本?
  • select * from event_table where event="Basketball" group by country order by date desc limit 20;

标签: mysql unique


【解决方案1】:

一个国家就够了

SELECT * 
FROM event_table 
WHERE event="Basketball" 
AND country = 'US'
ORDER BY   `date` DESC
LIMIT 30 

如果你想要更多的县使用

SELECT
city, country, event, `date`
FROM
    (SELECT *
    ,ROW_NUMBER() OVER(PARTITION BY county ORDER BY `date` DESC)  rn
    FROM event_table 
    WHERE event="Basketball") t1
WHERE rn <= 30 

然后你可以选择你喜欢的国家

【讨论】:

  • 谢谢nbk。但是我不能将国家/地区称为“美国”,因为这是另一个变量,这意味着这次我只想从美国获取,但下一次可能只是 CA。无论如何让它工作?
  • 通常你有一种语言,比如 python,c c++ c# asp nez vb net ruby​​ 或 php 或者你可以使用变量的存储过程。
  • select * from event_table where event="Basketball" group by country order by date desc limit 20; – Jens 53 分钟前成功了!
  • group by 只有在 full_GROUP_By 被禁用时才有效,它不会给你你正在寻找的答案,因为 limit 实际上只显示 20 个值,查询将显示 20 个国家,请尝试评论和答案
  • 谢谢nbk。我想获得 20 个值,但每个查询只显示每个县一次。你是什​​么意思full-Group-By被禁用?我确实发现在“排序依据”之前放置“分组依据”不能正确排序日期。所以它还没有解决问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2016-09-14
  • 2012-11-10
相关资源
最近更新 更多