我有一个包含许多列的表,但是只有三列是相关的:
id - INT
species - VARCHAR(5)
date - DATE
我想找到以下内容: 对于每种物种,请给我提供日期最少的ID
一种物种的示例数据:
id | species | date
----------------------------
123 | 03100 | 2007-04-23
----------------------------
324 | 03100 | 2005-05-26
我尝试过按订单分组
SELECT * FROM `table` GROUP BY species ORDER BY `date` ASC;
RESULT:
id | species | date
----------------------------
123 | 03100 | 2007-04-23
我尝试在分组之前在子选择中订购:
SELECT
id, species, `date`
FROM
(SELECT
*
FROM
`table`
ORDER BY `date` ASC) sub
GROUP BY species;
RESULT:
id | species | date
----------------------------
123 | 03100 | 2007-04-23
结果应该是
id | species | date
----------------------------
324 | 03100 | 2005-05-26
因为日期是该物种的最早日期。
我们大约有1100种不同的物种,所以我希望如果可以在单个查询中完成而不是对每个物种进行1100个查询。
更新: 预先向您道歉,您的建议很好,但是我很难实现它们,因为我的数据模型比我发布的演示要复杂得多:
TABLE: obs
------------------
id | INT
species | VARCHAR
user_id | INT
trip_id | INT
TABLE: trips
------------------
trip_id | INT
dato | DATE
实际上,我必须将obs
和trips
结合在一起才能获得日期,然后必须找到特定user_id
希望您仍然可以帮助我:-)
关于, 安德斯
答案 0 :(得分:0)
如果您想要最早的记录,我建议您进行过滤,而不是汇总。我将使用相关的子查询:
select t.*
from t
where t.date = (select min(t2.date) from t t2 where t2.species = t.species);
如果您可以有多个日期,并且每个ID仅需要一条记录,则可以将其调整为:
select t.*
from t
where t.id = (select t2.id
from t t2
where t2.species = t.species
order by t2.date asc, t2.id asc
);
答案 1 :(得分:0)
对于大数据,我建议如下:
from google.cloud import translate
# Instantiates a client
translate_client = translate.Client()
# The text to translate
text = u'this is me'
# The target language
target = 'fr'
# Translates some text into Russian
translation = translate_client.translate(
text,
target_language=target, format='text')
print(u'Text: {}'.format(text))
print(u'Translation: {}'.format(translation['translatedText']))