我有这个SQL,左边的联接是因为我需要其他表中的ID。
SELECT DISTINCT
testjob.id AS id,
testjob.StartTime AS Date,
testsuitecollectionname,
testsuitecollection,
TestSuiteName
FROM
testjob
LEFT JOIN
testsuitecollection ON testsuitecollection.id = testjob.testsuitecollectionid
LEFT JOIN
testsuitecollectionlink ON testsuitecollection.id = testsuitecollectionlink.testsuitecollection
LEFT JOIN
testsuite ON testsuite.id = testsuitecollectionlink.testsuite
WHERE
TRUE AND Engine = 'SeqZap'
AND testjob.id IN ('3574' , '3571',
'3511',
'3483',
'3482',
'3476',
'3463',
'3354',
'3255',
'3247',
'3215',
'3212',
'2708')
ORDER BY testsuite;
这将打印包含
的表格|-----|----------------------|-----------------------|-------------------|-------------|
| id | Date |testsuitecollectionname|testsuitecollection|TestSuiteName|
|-----|----------------------|-----------------------|-------------------|-------------|
|3574 |'2019-12-08 12:06:03' | FOOD | '17' | 'test1' |
|3511 |'2019-11-11 12:41:54' | GREN | '4' | 'test1' |
|3483 |'2019-10-31 08:19:20' | TEST | '35' | 'test1' |
|3482 |'2019-11-11 12:41:54' | eewe | '4' | 'test2' |
|3476 |'2019-08-30 02:50:54' | ddda | '16' | 'test2' |
|3463 |'2019-12-08 12:06:03' | mmad | '17' | 'test2' |
|3354 |'2019-10-31 03:28:43' | good | '34' | 'test3' |
|3215 |'2019-11-26 16:58:44' | boie | '30' | 'test3' |
|2708 |'2019-12-08 12:06:03' | body | '16' | 'test3' |
|-----|----------------------|-----------------------|-------------------|-------------|
我正在尝试将TestSuiteName排序为最新的Date,因此它看起来像这样:
|-----|----------------------|-----------------------|-------------------|-------------|
| id | Date |testsuitecollectionname|testsuitecollection|TestSuiteName|
|-----|----------------------|-----------------------|-------------------|-------------|
|3574 |'2019-12-08 12:06:03' | FOOD | '17' | 'test1' |
|3463 |'2019-12-08 12:06:03' | mmad | '17' | 'test2' |
|2708 |'2019-12-08 12:06:03' | body | '16' | 'test3' |
|-----|----------------------|-----------------------|-------------------|-------------|
我有点卡住,因为TestSuiteName列与testsuite.id and testsuite.TestSuiteName
位于不同的表中,而Date来自testjob.StartTime
。
整天都坐在这条sql中,所以希望它有意义。
感谢您的帮助。
答案 0 :(得分:0)
假设您想要每个测试套件的最新迭代,您只需要针对包含这些元组的视图过滤查询:
第1步:创建过滤器元组
SELECT
MAX(testjob.StartTime) AS MaxDate.
TestSuiteName
FROM testjob
LEFT JOIN testsuitecollection ON testsuitecollection.id = testjob.testsuitecollectionid
LEFT JOIN testsuitecollectionlink ON testsuitecollection.id = testsuitecollectionlink.testsuitecollection
LEFT JOIN testsuite ON testsuite.id = testsuitecollectionlink.testsuite
GROUP BY testsuite.id
第2步:根据结果过滤结果集
SELECT baseview.*
FROM (
SELECT DISTINCT
testjob.id AS id,
testjob.StartTime AS Date,
testsuitecollectionname,
testsuitecollection,
TestSuiteName
FROM
testjob
LEFT JOIN
testsuitecollection ON testsuitecollection.id = testjob.testsuitecollectionid
LEFT JOIN
testsuitecollectionlink ON testsuitecollection.id = testsuitecollectionlink.testsuitecollection
LEFT JOIN
testsuite ON testsuite.id = testsuitecollectionlink.testsuite
WHERE
TRUE AND Engine = 'SeqZap'
AND testjob.id IN ('3574' , '3571',
'3511',
'3483',
'3482',
'3476',
'3463',
'3354',
'3255',
'3247',
'3215',
'3212',
'2708')
) AS baseview
INNER JOIN
(
SELECT
MAX(testjob.StartTime) AS MaxDate.
TestSuiteName
FROM testjob
LEFT JOIN testsuitecollection ON testsuitecollection.id = testjob.testsuitecollectionid
LEFT JOIN testsuitecollectionlink ON testsuitecollection.id = testsuitecollectionlink.testsuitecollection
LEFT JOIN testsuite ON testsuite.id = testsuitecollectionlink.testsuite
GROUP BY testsuite.id
) AS filterview
ON baseview.Date=filterview.MaxDate
AND baseview.TestSuiteName=filterview.TestSuiteName
ORDER BY TestSuiteName;