选择日期最高的结果

时间:2020-01-14 15:21:14

标签: mysql sql

我有这个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中,所以希望它有意义。 感谢您的帮助。

1 个答案:

答案 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;