Получить строки с наивысшим идентификатором - PullRequest
0 голосов
/ 16 июня 2020

Итак, у меня есть эта проблема, когда я пытаюсь получить строку с наивысшим id, причина, по которой я сделал группу restresults.id в первом примере, заключается в том, что по какой-то причине она показывает две одинаковые строки, но это устранено с этим, но поскольку TestSuiteCollectionId и TestCaseId имеют тот же TestCaseId, но другой TestSuiteCollectionId, и мне нужна строка с самым высоким id или как здесь используется testresults.id, я подумал, что может сгруппировать идентификаторы и выполнить ORDER BY testresult.id DESC, чтобы сначала получить наивысшее значение id, но по какой-то причине он не берет первые две строки из примера 1. Вот мой довольно длинный код sql, не возражайте все nameId's. Имейте в виду, что LIMIT 2 не будет работать, потому что у меня больше TestCaseId's, это только для идентификатора 1841, поэтому он должен быть наивысшим идентификатором для каждого group by TestSuiteCollectionId, TestCaseId с разными TestCaseId's

SELECT 
testresults.id, nameId, TestSuiteId, TestCaseId, TestSuiteCollectionId, TestCaseName, TestSuiteName, TestSuiteCollectionName, StatusId
FROM
    Testreportingdebug.testresults
        LEFT JOIN
    TestResultRequirementLink ON testresults.id = TestResultRequirementLink.testresultid
        LEFT JOIN
    TestCaseRequirement ON TestResultRequirementLink.requirementId = TestCaseRequirement.id
        LEFT JOIN
    testcase ON testresults.TestCaseId = testcase.id
        LEFT JOIN
    testsuite ON testresults.TestSuiteId = testsuite.id
        LEFT JOIN
    testsuitecollection ON testresults.TestSuiteCollectionId = testsuitecollection.id
WHERE
    TRUE
        AND Testcaserequirement.nameId IN ('49971' , '49974',
        '49976',
        '305652',
        '305653',
        '305648',
        '46486',
        '46487',
        '46440',
        '46432',
        '46447',
        '46474',
        '46441',
        '651706',
        '651709',
        '305655',
        '309133',
        '46488',
        '46317',
        '46364',
        '46365',
        '46336',
        '46342',
        '49963',
        '49956',
        '49961',
        '46467',
        '46468',
        '46469',
        '171651',
        '171652',
        '171654',
        '171655',
        '190800',
        '190799',
        '190801',
        '171232',
        '171647',
        '171648',
        '171650',
        '226065',
        '226064',
        '236257',
        '46344',
        '46332',
        '46345',
        '46331',
        '46347',
        '46330',
        '46346',
        '46720',
        '46723',
        '46725',
        '46728',
        '46737',
        '46740',
        '46743',
        '46527',
        '46530',
        '46534',
        '46535',
        '46550',
        '46557',
        '46528',
        '46533',
        '46551',
        '46559',
        '46560',
        '46703',
        '46704',
        '46706',
        '46574',
        '46708',
        '46537',
        '46543',
        '46563',
        '46567',
        '46326',
        '46328',
        '46680',
        '46643',
        '46627',
        '46626',
        '46625',
        '46622',
        '46623',
        '46644',
        '46645',
        '46647',
        '46648',
        '46714',
        '46673',
        '46674',
        '46677',
        '46679',
        '46683',
        '46689',
        '46713',
        '46678',
        '46684',
        '46699',
        '46707',
        '49994',
        '46601',
        '46604',
        '46579',
        '46602',
        '46603',
        '46605',
        '46690',
        '46456',
        '46437',
        '46438',
        '46439',
        '46475',
        '46455',
        '83985',
        '46472',
        '46471',
        '1178127',
        '1178128',
        '1178129',
        '1178132',
        '1271718',
        '46473',
        '1178137',
        '1301190',
        '1308824',
        '1273524',
        '1273525',
        '1273526',
        '1273527',
        '1273528',
        '1273529',
        '1308825',
        '1308827',
        '1308826',
        '1336930',
        '1308828',
        '991788',
        '1273496',
        '1308819',
        '1273497',
        '1273500',
        '1273503',
        '1273508',
        '1273510',
        '1273512',
        '1273518',
        '1308822',
        '1273515',
        '1284164',
        '1301195',
        '1273516',
        '1273517',
        '1271722',
        '1271723',
        '1271724',
        '1284162',
        '1271720',
        '1271728',
        '1271731',
        '1271727',
        '1271730',
        '1271733',
        '1280758',
        '1271736',
        '1271738',
        '1271740',
        '1271743',
        '1271747',
        '1271746',
        '1271744',
        '1271745',
        '1301193',
        '1271726',
        '1271729',
        '1271732',
        '1271735',
        '1271737',
        '1271739',
        '1271741',
        '1301632',
        '1273520',
        '1273522',
        '1280762',
        '1280765',
        '1284168',
        '1284167',
        '1301196',
        '1284165',
        '1284166',
        '1273509',
        '1273511',
        '1273514',
        '1308820',
        '1308821',
        '1273498',
        '1273499',
        '1273501',
        '1273502',
        '1273504',
        '1273505',
        '1308829',
        '1308830',
        '1308831',
        '1273530',
        '1273531',
        '1273532',
        '1273533',
        '1273534',
        '1273535',
        '1308832',
        '1308833',
        '1308834',
        '1273537',
        '1273542',
        '1273543',
        '1273539',
        '1280768',
        '1273540',
        '1273544',
        '1273541',
        '1301197',
        '1280766',
        '1273538',
        '1280767',
        '1280769',
        '1284169',
        '1308835',
        '1308836',
        '1308837',
        '1273545',
        '1273546',
        '1273547',
        '1273548',
        '1273549',
        '1273550',
        '1308838',
        '1308839',
        '1308840',
        '1273552',
        '1273557',
        '1273558',
        '1280770',
        '1273553',
        '1280771',
        '1273559',
        '1273556',
        '1280773',
        '1273554',
        '1280772',
        '1301198',
        '1273555',
        '1284170',
        '1273521',
        '1280761',
        '1280763',
        '1280764')
        AND `TestSuiteCollectionName` LIKE '%GiM10%' AND TestCaseId = 1841
        GROUP BY testresults.id
ORDER BY testresults.id DESC;

ВЫХОД

Извините за публикацию этого изображения, но оно слишком широкое

Вывод таблицы

Затем я попытался сгруппировать по идентификаторам и получить их от самого высокого testresult.id до самого низкого. но он показывает самый низкий независимо от того, что без DES C или с.

Группировать по TestCaseId, TestSuiteCollectionId

Ответы [ 3 ]

1 голос
/ 16 июня 2020

Похоже, вам нужна строка с наивысшим TestResults.Id для каждой TestSuiteCollection, TestCase. Есть несколько способов go об этом, например, группой и присоединением к ней. Для наиболее чистого и легкого для чтения подхода я бы порекомендовал для этого оконную функцию.

Вы можете сделать что-то вроде этого:

SELECT * FROM
(

    SELECT 
        ROW_NUMBER() OVER (PARTITION BY TestSuiteCollectionId, TestCaseId ORDER BY TestResults.Id DESC) AS RowNumber,
        testresults.id,
        nameId, 
        TestSuiteId, 
        TestCaseId, 
        TestSuiteCollectionId,
        TestCaseName, 
        TestSuiteName, 
        TestSuiteCollectionName,
        StatusId
    FROM
        Testreportingdebug.testresults
            LEFT JOIN
        TestResultRequirementLink ON testresults.id = TestResultRequirementLink.testresultid
            LEFT JOIN
        TestCaseRequirement ON TestResultRequirementLink.requirementId = TestCaseRequirement.id
            LEFT JOIN
        testcase ON testresults.TestCaseId = testcase.id
            LEFT JOIN
        testsuite ON testresults.TestSuiteId = testsuite.id
            LEFT JOIN
        testsuitecollection ON testresults.TestSuiteCollectionId = testsuitecollection.id
    --WHERE
       --any additional criteria
   )foo
WHERE foo.RowNumber = 1
0 голосов
/ 16 июня 2020

Если я вас правильно понимаю, вам нужен максимальный идентификатор для каждого TestSuiteCollectionId и TestCaseId, поэтому я помещаю max (id) и группирую в операторе FROM, а затем присоединяю другие таблицы к этому максимальному идентификатору. SQL:

select 
testresults.id, 
nameId, 
TestSuiteId, 
TestCaseId, 
TestSuiteCollectionId, 
TestCaseName, 
TestSuiteName, 
TestSuiteCollectionName, 
StatusId
from(
select TestSuiteCollectionId, TestCaseId, max(testresults.id) id 
FROM Testreportingdebug.testresults
LEFT JOIN testsuitecollection ON testresults.TestSuiteCollectionId = testsuitecollection.id
WHERE TRUE AND Testcaserequirement.nameId IN ('49971' , '49974','49976',........,'1280764')
        AND `TestSuiteCollectionName` LIKE '%GiM10%' AND TestCaseId = 1841
GROUP BY TestSuiteCollectionId, TestCaseId) testresults
LEFT JOIN
    TestResultRequirementLink ON testresults.id = TestResultRequirementLink.testresultid
        LEFT JOIN
    TestCaseRequirement ON TestResultRequirementLink.requirementId = TestCaseRequirement.id
        LEFT JOIN
    testcase ON testresults.TestCaseId = testcase.id
        LEFT JOIN
    testsuite ON testresults.TestSuiteId = testsuite.id
        LEFT JOIN
    testsuitecollection ON testresults.TestSuiteCollectionId = testsuitecollection.id
0 голосов
/ 16 июня 2020

, если идентификаторы являются целыми числами, вы можете попробовать использовать агрегатную функцию max ():

max(Testcaserequirement.nameId)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...