mysql 按月分组,取每月日期小的

虹舞长空 发布于 2015/06/26 17:09
阅读 1K+
收藏 0

DROP TABLE IF EXISTS `t_test`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `t_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `org` varchar(10) DEFAULT NULL,
  `status` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;


--
-- Dumping data for table `t_test`
--


LOCK TABLES `t_test` WRITE;
/*!40000 ALTER TABLE `t_test` DISABLE KEYS */;
INSERT INTO `t_test` VALUES (1,'qwe','2015-02-09'),(2,'qqq','2015-03-03'),(3,'www','2012-02-11'),(4,'qwe','2015-03-10'),(5,'asd','2015-04-10'),(6,'fff','2015-05-10'),(7,'aaa','2015-10-10'),(8,'fff','2015-03-10'),(9,'www','2012-02-01'),(10,'asd','2015-03-02'),(11,'qwe','2015-03-26'),(12,'www','2012-03-11');
/*!40000 ALTER TABLE `t_test` ENABLE KEYS */;
UNLOCK TABLES;



上面是表里面测试数据,按照月份分组,取每个月日期最小的数据

加载中
0
虹舞长空
虹舞长空
select * from t_test t where t.status=(select min(status) from t_test tt where t.org=tt.org
and TIMESTAMPDIFF(MONTH,t.status,tt.status)=0);



0
inmyfree
inmyfree
SELECT * FROM (SELECT * ,LEFT(`status`,7) as mouth  from t_test   ORDER BY `status` ) as tb1 GROUP BY tb1.mouth



虹舞长空
虹舞长空
貌似不对,我要的结果是,如果org重复的话,每个月取月份最小的一天, 例; 1 qwe 2015-2-9 ; 4 qwe 2015-3-10 ; 11 qwe 2015-3-26 只取id=1和id=4的
0
inmyfree
inmyfree

只想说你要求前后不一致,给了你想要的,你又说要另外一个...


虹舞长空
虹舞长空
@inmyfree 谢谢了,已经搞定了
inmyfree
inmyfree
回复 @虹舞长空 : 你现在是表达都不清楚,一开始说的是,按照月份排序,去每个月日期最小的数据,就是说每个月数据只取一天的数据,和ORG一点关系也没有好不,我现在都不明白你需求是怎样了
虹舞长空
虹舞长空
回复 @inmyfree : 我要的结果是下面的那种,你看下面的结果
inmyfree
inmyfree
回复 @虹舞长空 : 哪里不对呢?
虹舞长空
虹舞长空
这样也是不对的啊
0
虹舞长空
虹舞长空

原始数据是这样的

要的结果是这样的

返回顶部
顶部