MySQL从带有group by的表中选择最小值
大家好 我有一个表,它有一个称为id的自动递增值、一个用户id、一个称为date的日期和一个称为multiregistration的整数,用于多次注册 由于多重注册可以有多个日期,我需要首先选择日期最低的多重注册MySQL从带有group by的表中选择最小值,sql,mysql,select,group-by,Sql,Mysql,Select,Group By,大家好 我有一个表,它有一个称为id的自动递增值、一个用户id、一个称为date的日期和一个称为multiregistration的整数,用于多次注册 由于多重注册可以有多个日期,我需要首先选择日期最低的多重注册 您可以通过获取每次多重注册的最短日期进行比较,我需要获取每次多重注册的id。然后,它应该按最短日期对它们进行排序 一些样本数据 预期产量 你可以把它比作 SELECT `multiregistration` FROM `registrations` ORDER BY `date`
您可以通过获取每次多重注册的最短日期进行比较,我需要获取每次多重注册的id。然后,它应该按最短日期对它们进行排序 一些样本数据 预期产量 你可以把它比作
SELECT `multiregistration`
FROM `registrations`
ORDER BY `date`
但我想删除重复项
下面是我现在正在使用的PHP代码
// Create the query
$query = 'SELECT `multiregistration` AS `multireg` FROM `registrations` WHERE `multiregistration`>0 GROUP BY `multiregistration`';
// Execute the query and set the result into a variable
$idsTo2ndQuery = arrayExecuteLocalQueryGetResults($query);
// Create the second Query
$query2 = 'SELECT `multiregistration` AS `multireg` FROM `registrations` WHERE `multiregistration`='.implode(' OR `multiregistration`=', $idsTo2ndQuery).' ORDER BY `date` ASC';
// An array of IDs (sorted)
$ids = array();
// Execute the query and set the result into a variable
$idsArray = arrayExecuteLocalQueryGetResults($query2);
// For each entry
foreach ($idsArray AS $idArray)
if (!in_array($idArray, $ids))
$ids[] = $idArray;
// Return the IDs
return $ids;
它正在工作吗?如果按多重注册分组,则每个不同的多重注册只能得到一行。这将为您提供所有行的集合,这些行首先按多重注册排序,然后按日期排序
SELECT MIN(date), `multiregistration`
FROM `registrations`
GROUP BY `multiregistration`
ORDER by `date`
SELECT multiregistration, date
FROM registrations
ORDER BY multiregistration, date
更新:
这将给你一组ID…一个用于每个不同的多重注册,其中日期是mindate
SELECT id
FROM registrations
GROUP BY multiregistration
ORDER BY multiregistration, date
更新:
这将为您提供一条多次注册记录…其中日期是表中的第一个日期
SELECT top 1 multiregistration
FROM registrations
ORDER BY date
更新:
样本数据
ID-----USER-ID-----DATE------------MULTIREGISTRATION
1 101 1/2/2011 3
2 101 1/1/2011 3
3 102 1/5/2011 2
4 102 1/7/2011 2
5 103 1/1/2011 4
最短日期是2011年1月1日多重注册3将是2011年1月1日-id 2。。。
这将返回按升序排序的日期结果集,其中多重注册值为3
SELECT *
FROM registrations
WHERE ID in (SELECT min(date) FROM registrations)
ORDER BY date
对于这两种情况,实际上在本例中,列表中的所有3-3、2和4…下面将返回如下所示的结果集
SELECT *
FROM registrations
ORDER BY multiregistration, date
这将返回一个结果集,如
3 102 1/5/2011 2
4 102 1/7/2011 2
2 101 1/1/2011 3
1 101 1/2/2011 3
5 103 1/1/2011 4
下面是我在T-SQL中的实现方法。它声明了一个变量表来处理数据,查询生成所请求的确切结果
DECLARE @A AS TABLE(ID INT, USERID INT, SOMEDATE DATE, MULTIREG INT)
INSERT @A
SELECT 1,2,'20100201',1 UNION ALL
SELECT 2,3,'20100201',2 UNION ALL
SELECT 3,4,'20100101',2 UNION ALL
SELECT 4,2,'20100302',1 UNION ALL
SELECT 5,4,'20100203',3 UNION ALL
SELECT 6,1,'20100202',3
SELECT * FROM @A AS A
WHERE A.SOMEDATE = (SELECT MIN(SOMEDATE) FROM @A AS B WHERE B.MULTIREG = A.MULTIREG)
ORDER BY USERID DESC
ID USERID SOMEDATE MULTIREG
3 4 2010-01-01 2
1 2 2010-02-01 1
6 1 2010-02-02 3
我只需要多重注册的ID哦,你误解了我,我需要多重注册,但它不应该只按日期按多重注册排序,它应该是多重注册的第一个日期那么你要找一个整数值一个计数?存储在表中第一个最早日期的多重注册中?或您是否在寻找存储在多重注册中的每个不同用户id的第一个最早日期的整数值?您可以通过获取每个多重注册的最小日期进行比较,我需要获取每个多重注册的id。然后它应该按最短日期对它们进行排序这是我正在搜索的内容,但我需要同时输出这两个数据,并且不应该超时,因为在PHPMyAdminThat中这样做并没有起到作用。我甚至试过按顺序将SELECT DISTINCT MULTIRGISTER作为注册的MULTIRGIDdate@The87Boy-你有什么错误吗?或者你能在你的问题中写下一些预期的样本输出吗?我可以尝试再次解释我想要什么我需要选择多个注册的ID,可以是分组方式,也可以是不同的,它应该是按日期排序的。我没有收到任何错误。我认为您需要提供一些示例数据以及该示例数据的预期输出。@Scorpi0这样更好吗?
SELECT *
FROM registrations
ORDER BY multiregistration, date
3 102 1/5/2011 2
4 102 1/7/2011 2
2 101 1/1/2011 3
1 101 1/2/2011 3
5 103 1/1/2011 4
DECLARE @A AS TABLE(ID INT, USERID INT, SOMEDATE DATE, MULTIREG INT)
INSERT @A
SELECT 1,2,'20100201',1 UNION ALL
SELECT 2,3,'20100201',2 UNION ALL
SELECT 3,4,'20100101',2 UNION ALL
SELECT 4,2,'20100302',1 UNION ALL
SELECT 5,4,'20100203',3 UNION ALL
SELECT 6,1,'20100202',3
SELECT * FROM @A AS A
WHERE A.SOMEDATE = (SELECT MIN(SOMEDATE) FROM @A AS B WHERE B.MULTIREG = A.MULTIREG)
ORDER BY USERID DESC
ID USERID SOMEDATE MULTIREG
3 4 2010-01-01 2
1 2 2010-02-01 1
6 1 2010-02-02 3