<p>方法A是冻糕的答案,我对它做了一些修改以使其发挥作用:</p>
<pre><code>SELECT StrainId, Max(date(DateTime)) As LatestExperimentDate, FlaskNum, Min(HarvestIndex) As EarliestHarvest,Species,NumLabeledCarbons,MDV
FROM LCMS
WHERE StrainId IN ('U','S','UG','SG') AND HarvestIndex = (SELECT min(HarvestIndex) FROM LCMS)
GROUP BY StrainId, FlaskNum, Species, NumLabeledCarbons, MDV
HAVING date(DateTime) = Max(date(DateTime))
ORDER BY StrainId, date(DateTime), FlaskNum, HarvestIndex,Species,NumLabeledCarbons;
</code></pre>
<p>方法B是CL,我只是稍微修改了一下,因为列名称不明确:</p>
<pre><code>SELECT LCMS.StrainId,date(DateTime),FlaskNum,HarvestIndex,Species,NumLabeledCarbons,MDV
FROM LCMS
JOIN ( SELECT StrainId,max(date(DateTime)) AS MaxDate
FROM LCMS
WHERE StrainId IN ('U','S','UG','SG')
GROUP BY StrainId) AS MD
ON LCMS.StrainId=MD.StrainId AND date(LCMS.DateTime)=MD.MaxDate
WHERE HarvestIndex = ( SELECT min(HarvestIndex)
FROM LCMS)
ORDER BY LCMS.StrainId,date(DateTime),FlaskNum,HarvestIndex,Species,NumLabeledCarbons;
</code></pre>
<p>方法C是我上面的for循环方法。你知道吗</p>
<p>我实现并计时了每个方法,以获取包含我想要的所有数据的中间字典,并验证它们是否都相同。你知道吗</p>
<p>此外,在100次迭代中以秒为单位计时,发现方法A、B和C的平均值分别为0.05831611、0.05774071和0.23839145秒,各自的标准偏差分别为0.0071795、0.00439557和0.01499475。你知道吗</p>
<p>for-loop方法比CL和Parfait提出的方法花费了大约4倍的时间。你知道吗</p>
<p>从技术上讲,我希望有一种方法可以将sqlite3返回的数据划分为NumLabeledCarbons,每个样本/物种组合的MDV数据,以及那些按物种分组的数据,而不是匹配查询的每一行的元组的有序列表。尽管有人告诉我这不是SQL的重点。你知道吗</p>
<p>然而,这比我提出的解决方案要好得多,我在试图理解你的答案时学到了很多。你知道吗</p>
<p>感谢您抽出时间回答我的第一个堆栈溢出问题!你知道吗</p>