mySQL返回每个字段的特定行

mySQL返回每个字段的特定行,mysql,sql,Mysql,Sql,我会尽我最大的努力来解释这个。。。我希望为每个字段返回5个随机行。例如,我有: 选择名称、票证ID、频道 从票上 在日期“2017-09-01”和日期“2017-10-01”之间创建的票证 频道=‘电话’或‘聊天’或‘电子邮件’ 第一个代理主电子邮件='abc。def@mail.com“我想你在寻找这样的东西: 选择名称、票证ID、频道 从票上 在日期“2017-09-01”和日期“2017-10-01”之间创建的票证 频道=‘电话’或‘聊天’或‘电子邮件’ 第一个代理主电子邮件='abc。

我会尽我最大的努力来解释这个。。。我希望为每个字段返回5个随机行。例如,我有:

选择名称、票证ID、频道 从票上 在日期“2017-09-01”和日期“2017-10-01”之间创建的票证 频道=‘电话’或‘聊天’或‘电子邮件’
第一个代理主电子邮件='abc。def@mail.com“我想你在寻找这样的东西:

选择名称、票证ID、频道 从票上 在日期“2017-09-01”和日期“2017-10-01”之间创建的票证 频道=‘电话’或‘聊天’或‘电子邮件’ 第一个代理主电子邮件='abc。def@mail.com'
按兰特限额5订购 您可能需要:

SELECT "Name","Ticket ID","Channel"
FROM Tickets
WHERE "Ticket Created at" between date('2017-09-01') AND date('2017-10-01')
AND ( "Channel" = 'Phone' or "Channel" = 'Chat' or "Channel" = 'Email' )
AND "First Agent Primary Email" = 'abc.def@mail.com'
ORDER BY RAND() LIMIT 5;

不要对列名称使用引号。。当您有复合名称时,请使用backtics 对多个值使用IN子句,或对每个或条件重复列名 您可以使用limit 5和order by rand获得5个临时行

  SELECT Name,`Ticket ID`,Channel
  FROM Tickets
  WHERE `Ticket Created at` between date('2017-09-01') AND date('2017-10-01')
  AND `Channel` IN ( 'Phone', 'Chat' , 'Email')
  AND `First Agent Primary Email` = 'abc.def@mail.com'
  ORDER BY order by rand() limit 5 

其他答案的日期范围似乎都有问题,正如您最初的查询一样,因此我决定发布以下内容:

SELECT
    Name, `Ticket ID`, Channel
FROM Tickets
WHERE 
    `Ticket Created at` >= '2017-09-01' AND `Ticket Created at` < '2017-10-01' AND
    Channel IN ('Phone', 'Chat', 'Email') AND
    `First Agent Primary Email` = 'abc.def@mail.com'
ORDER BY
    RAND()
LIMIT 5;
这可能包括发生在10月1日午夜的数据,可能不是你所想的。而且,您不需要用日期来包装日期文字;如果使用了正确的格式,MySQL已经可以处理它们了

编辑:

如果您希望三个频道中的每一个都有5张随机票证,可以通过联合查询来实现:

SELECT Name, `Ticket ID`, Channel
FROM
(
    SELECT Name, `Ticket ID`, Channel
    FROM Tickets
    WHERE `Ticket Created at` >= '2017-09-01' AND
          `Ticket Created at` < '2017-10-01' AND
          Channel = 'Phone' AND
         `First Agent Primary Email` = 'abc.def@mail.com'
    ORDER BY RAND() LIMIT 5
) t1
UNION ALL
(
    SELECT Name, `Ticket ID`, Channel
    FROM Tickets
    WHERE `Ticket Created at` >= '2017-09-01' AND
          `Ticket Created at` < '2017-10-01' AND
          Channel = 'Chat' AND
         `First Agent Primary Email` = 'abc.def@mail.com'
    ORDER BY RAND() LIMIT 5
) t2
UNION ALL
(
    SELECT Name, `Ticket ID`, Channel
    FROM Tickets
    WHERE `Ticket Created at` >= '2017-09-01' AND
          `Ticket Created at` < '2017-10-01' AND
          Channel = 'Email' AND
         `First Agent Primary Email` = 'abc.def@mail.com'
    ORDER BY RAND() LIMIT 5
) t3;
尝试此查询

SELECT Name,Ticket ID,Channel FROM Tickets
WHERE Ticket Created at between date('2017-09-01') 
AND date('2017-10 
01')
AND Channel IN ( 'Phone', 'Chat' , 'Email')
AND First Agent Primary Email = 'abc.def@mail.com'
ORDER BY  RAND() LIMIT 5;

没有用于SQL on Stack Overflow的内置代码段谢谢!如果我想在数据库中为每个频道返回5个票证ID,那么5个电话票证ID、5个聊天票证ID和5个电子邮件票证ID,我该怎么办?@AJT你刚才要求的是一个完全不同的查询。我们如何知道您不会第三次更改您的要求?我很抱歉误解您,但我最初的问题是,我想做的是让表在每个电话频道、每个聊天频道或每个电子邮件频道返回5个随机票证ID。例:5个随机ID用于电话,5个用于聊天,5个用于电子邮件。@AJT我的错…我查看了其他答案,并假设他们读对了。我用一种方法进行了更新,即使用三个子查询的并集。这种更新确实帮了我的忙。谢谢你!非常感谢你!
SELECT Name,Ticket ID,Channel FROM Tickets
WHERE Ticket Created at between date('2017-09-01') 
AND date('2017-10 
01')
AND Channel IN ( 'Phone', 'Chat' , 'Email')
AND First Agent Primary Email = 'abc.def@mail.com'
ORDER BY  RAND() LIMIT 5;