我一直在研究如何正确使用MySQL Group By和Joins来避免其他列中非聚合值的不确定值。现在,使用下面的查询,当我按客户ID分组时,如何确保选择了正确的Vin编号,并且试驾时间最短?基本上,我如何确保获得与最小测试驱动时间相关的整个行?
SELECT t1.ID AS CUSTOMERID, t1.carhash,
MIN(t1.testdrivetime) AS testdrivetime,
t2.vinnumber AS vinnumber
FROM TABLE1 t1
INNER JOIN TABLE2 t2 ON t2.vinnumber = t1.carhash
INNER JOIN (SELECT t1.ID, MIN(testdrivetime) AS testdrivetime
FROM TABLE1
GROUP BY t1.ID) f
ON f.ID = t1.ID AND f.testdrivetime = t1.testdrivetime
GROUP BY ID数据库中的次数:
|---------------------|------------------|-------------------------|
| ID | carhash | testdrivetime |
|---------------------|------------------|-------------------------|
| 12 | 345 | 2:22 |
|---------------------|------------------|-------------------------|
| 12 | 277 | 4:51 |
|---------------------|------------------|-------------------------|上面查询的输出(错误的汽车散列,因为它是不确定的):
|---------------------|------------------|-------------------------|
| ID | carhash | testdrivetime |
|---------------------|------------------|-------------------------|
| 12 | 277 | 2:22 |
|---------------------|------------------|-------------------------|我想要的输出:(使用来自同一行的正确的carhash作为最小试驾时间)
|---------------------|------------------|-------------------------|
| ID | carhash | testdrivetime |
|---------------------|------------------|-------------------------|
| 12 | 345 | 2:22 |
|---------------------|------------------|-------------------------|发布于 2018-11-12 17:11:32
在子选择查询(Derived Table)中,确定每个ID.
testdrivetime值此结果集使用ID和testdrivetime返回到主表,以获取与最小testdrivetime值对应的行。尝试:
SELECT
t.*
FROM your_table AS t
JOIN
(
SELECT
ID,
MIN(testdrivetime) AS min_testdrivetime
FROM your_table
GROUP BY ID
) AS dt
ON dt.ID = t.ID AND
dt.min_testdrivetime = t.testdrivetime https://stackoverflow.com/questions/53258165
复制相似问题