简体   繁体   English

SQL查询不同的结果

[英]Sql Query for Different result

I am using mysql for database. 我正在使用mysql作为数据库。 I have to find the distinct latest result for a customer having different values for ContentPrvdr field. 对于具有不同ContentPrvdr字段值的客户,我必须找到不同的最新结果。 I am using following sql query: 我正在使用以下sql查询:

SELECT  distinct ContentPrvdr,LocalDatabaseId,Website,BusID,LastUpdated,
UserCat1Rank_Local,UserCat1Count_Local,Citations,PhotoCount,
VideoCount,Cat_Count FROM local_database WHERE CMCustomerID=10  
ORDER BY LocalDatabaseId,LastUpdated LIMIT 0,3

to find the result,but it will return three result having same value for ContentPrvdr .But i want different value results for ContentPrvdr . 寻找的结果,但它会返回三个结果具有相同的价值ContentPrvdr 。但我要为不同值的结果ContentPrvdr Here are the sample data for test. 这是用于测试的样本数据。

LocalDatabaseId     CMCustomerID    FranchiseName   ContentPrvdr    BusName     ConvBusName     KeyWBizName     KeyWCat     Website     LocationNmbr    PhoneLoc    StreetLoc   Cat_Count   Description_Local   Citations   PhotoCount  VideoCount  UserContent 
41  15  2 For 1 Pizza Co    bing    2 For 1 Pizza Co    2 FOR 1 PIZZA CO    2 For 1 Pizza Co, Los Angeles, CA   Pizza Restaurant, Los Angeles, CA   http://st1.map  1   3232699421  3480 E CESAR E CHAVEZ AVENUE    1       0   0   0   0
41  15  2 For 1 Pizza Co    bing    2 For 1 Pizza Co    2 FOR 1 PIZZA CO    2 For 1 Pizza Co, Los Angeles, CA   Pizza Restaurant, Los Angeles, CA   NULL    1   3232699421  3480 E CESAR E CHAVEZ AVENUE    1       0   0   0   0
56  15  2 For 1 Pizza Co.   Google  2 For 1 Pizza Co.   2 FOR 1 PIZZA CO    2 For 1 Pizza Co, Los Angeles, CA   Pizza Restaurant, Los Angeles, CA   Not Specified   1   2137494515  2528 S. FIGUEROA STREET 2       0   3   0   0
56  15  2 For 1 Pizza Co.   Google  2 For 1 Pizza Co.   2 FOR 1 PIZZA CO    2 For 1 Pizza Co, Los Angeles, CA   Pizza Restaurant, Los Angeles, CA   Not Specified   1   2137494515  2528 S. FIGUEROA STREET 2   Fresh N Ho  23  2       1
65  15  2 For 1 Pizza Co    Google  2 For 1 Pizza Co    2 FOR 1 PIZZA CO    2 For 1 Pizza Co, Los Angeles, CA   Pizza Restaurant, Los Angeles, CA   Not Specified   1   3232699421  3480 EAST CESAR E CHAVEZ AVENUE 1       0   0   0   0
65  15  2 For 1 Pizza Co    Google  2 For 1 Pizza Co    2 FOR 1 PIZZA CO    2 For 1 Pizza Co, Los Angeles, CA   Pizza Restaurant, Los Angeles, CA   Not Specified       3232699421‎ 3480 EAST CESAR E CHAVEZ AVENUE 1       25  0   0   1
126 15  2 For 1 Pizza Co    yellopages  2 For 1 Pizza Co    2 FOR 1 PIZZA CO    2 For 1 Pizza Co, Los Angeles, CA   Pizza Restaurant, Los Angeles, CA   http://www.yellow   1   5628610936  5720 IMPERIAL HWY STE Q 2   EATING PLACE    0   0   0   0
126 15  2 For 1 Pizza Co    yellopages  2 For 1 Pizza Co    2 FOR 1 PIZZA CO    2 For 1 Pizza Co, Los Angeles, CA   Pizza Restaurant, Los Angeles, CA   http://www.yello    1   5628610936  5720 IMPERIAL HWY STE Q 2   EATING PLACE    0   0   0   0

Please Some body help me how can i get this result with distinct ContentPrvdr values . 请有些人帮助我如何使用不同的ContentPrvdr值获得此结果。

Thanks in advance 提前致谢

You'll probably want to do something like: 您可能想要做类似的事情:

SELECT *
FROM
  (
    SELECT ContentPrvdr, LocalDatabaseId, MAX(LastUpdated) AS Updated
    FROM local_database
    WHERE CMCustomerID = 10
    GROUP BY ContentPrvdr, LocalDatabaseId
    ORDER BY Updated DESC
  ) SQ
INNER
JOIN local_database ld
ON SQ.ContentPrvdr = ld.ContentPrvdr
AND SQ.LocalDatabaseId = ld.LocalDatabaseId
AND SQ.Updated = ld.LastUpdated
LIMIT 0, 3

I've specifically structured the query this way, with not all the columns listed in the "SQ" block so that the core of the logic can be seen. 我以这种方式专门构造了查询,但并未在“ SQ”块中列出所有列,因此可以看到逻辑的核心。 the columns that you put in the SELECT statement in "SQ" (and thus GROUP BY" and also "JOIN ON") will need to be whichever ones are in the "local_database" table and identify the rows uniquely 您在“ SQ”中的SELECT语句中放置的列(因此在“ GROUP BY”和“ JOIN ON”中也是如此)必须是“ local_database”表中的任意列,并唯一地标识行

Try something like: 尝试类似:

SELECT *
FROM (
    SELECT
        `ContentPrvdr`,
        `LocalDatabaseId`,
        `LastUpdated`
    FROM `local_database` AS `inner`
    WHERE `CMCustomerID`=10
    ORDER BY `LastUpdated` DESC
) AS `outer`
GROUP BY `ContentPrvdr`
ORDER BY `LocalDatabaseId`, `LastUpdated`
LIMIT 0,3

If you want to get the latest value of a column named in the GROUP BY clause, you need to sort it in a sub-query, because MySQL doesn't appear to have any way to specify that to the GROUP BY clause itself. 如果要获取GROUP BY子句中命名的列的最新值,则需要在子查询中对其进行排序,因为MySQL似乎没有任何方法可以将其指定给GROUP BY子句本身。

You probably want something like this. 您可能想要这样的东西。 I'm assuming that (ContentPrvdr, LocalDatabaseId, LastUpdated, CMCustomerID) is unique. 我假设(ContentPrvdr,LocalDatabaseId,LastUpdated,CMCustomerID)是唯一的。 If this is not the case, you need to specify something that is unique on your database as it doesn't appear to have any obvious primary key. 如果不是这种情况下,你需要为它似乎没有什么明显的主键指定的东西你的数据库是唯一的。

SELECT T4.* FROM (
    SELECT T2.ContentPrvdr, T2.LocalDatabaseId, MIN(T2.LastUpdated) AS LastUpdated
    FROM (
        SELECT ContentPrvdr, MIN(LocalDatabaseId) AS LocalDatabaseId
        FROM local_database
        WHERE CMCustomerID = 10
        GROUP BY ContentPrvdr) AS T1
    JOIN local_database AS T2
    ON T1.ContentPrvdr = T2.ContentPrvdr
    AND T1.LocalDatabaseId = T2.LocalDatabaseId
    WHERE CMCustomerID = 10
    GROUP BY ContentPrvdr, LocalDatabaseId
) AS T3
JOIN local_database AS T4
ON T3.ContentPrvdr = T4.ContentPrvdr
AND T3.LocalDatabaseId = T4.LocalDatabaseId
AND T3.LastUpdated = T4.LastUpdated
WHERE CMCustomerID = 10
ORDER BY LocalDatabaseId, LastUpdated
LIMIT 3

This is the data I used to test that the query works: 这是我用来测试查询是否有效的数据:

CREATE TABLE local_database (
    CMCustomerID int NOT NULL,
    ContentPrvdr int NOT NULL,
    LocalDatabaseId int NOT NULL,
    LastUpdated int NOT NULL,
    Website int NOT NULL);
INSERT INTO local_database
(CMCustomerID, ContentPrvdr, LocalDatabaseId, LastUpdated, Website)
VALUES
(10, 1, 2, 2, 1),
(11, 1, 2, 2, 1),
(11, 1, 1, 1, 2),
(11, 1, 2, 1, 3),
(10, 2, 2, 2, 4),
(10, 2, 1, 3, 5),
(10, 2, 1, 2, 6),
(11, 3, 3, 3, 7),
(10, 4, 4, 4, 8),
(10, 5, 5, 5, 9);

And this is the result I get for this data: 这是我获得此数据的结果:

10, 2, 1, 2, 6
10, 1, 2, 2, 1
10, 4, 4, 4, 8

If this is not correct, please suggest adjustments to the test data and/or expected result to show what you do want. 如果这不正确,请建议对测试数据和/或预期结果进行调整,以显示您想要的内容。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM