2016-02-09 72 views
0
我有表

只得到组磨碎日期值等给出如下MySQL查询需要的领域

CREATE TABLE IF NOT EXISTS `testtab` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(100) NOT NULL, 
    `auto_num` varchar(100) NOT NULL, 
    `seal_num` varchar(100) NOT NULL, 
    `arr_date` date NOT NULL, 
    `unload_date` date NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ; 


INSERT INTO `testtab` (`id`, `name`, `auto_num`, `seal_num`, `arr_date`, `unload_date`) VALUES 
    (1, 'contain1', 'AT0000004815', 'CN44178', '2014-11-28', '2014-11-28'), 
    (2, 'contain1', 'AT0000004815', 'CN44178', '2014-12-28', '2014-12-28'), 
    (3, 'contain1', 'AT0000004815', 'CN44178', '2014-12-28', '2014-11-28'), 
    (4, 'contain1', 'AT0000004815', 'CN44178', '2014-11-28', '2014-12-28'), 
    (5, 'contain2', 'AT0000000227', 'CG11818', '2015-09-12', '2015-08-30'), 
    (6, 'contain2', 'AT0000000227', 'CG11818', '2015-08-30', '2015-08-30'), 
    (7, 'contain2', 'AT0000000227', 'CG11818', '2015-09-12', '2015-09-14'), 
    (8, 'contain2', 'AT0000000227', 'CG11818', '2015-08-30', '2015-09-14'), 
    (9, 'contain3', 'AT0000005297', 'FG1005G', '2015-01-25', '2015-01-27'), 
    (10, 'contain3', 'AT0000005297', 'FG1005G', '2015-01-25', '2014-12-27'); 

我需要的输出结果等给出如下 MySQL查询结果必须包含arr_date最大日期值,unload_date 组由字段:姓名,auto_num,seal_num

id name  auto_num  seal_num arr_date unload_date 
2 contain1 AT0000004815 CN44178  2014-12-28 2014-12-28 
7 contain2 AT0000000227 CG11818  2015-09-12 2015-09-14 
9 contain3 AT0000005297 FG1005G  2015-01-25 2015-01-27 

我想要的查询在这里使用,请帮助我的人,

回答

1

你可以这样做:

SELECT * FROM `testtab` t 
WHERE (t.arr_date,t.unload_date) in(select max(arr_date),max(unload_date) 
            from `testtab` s where s.name = t.name 
            and s.auto_num = t.auto_num and s.seal_num = t.seal_num) 

这将选择每个组合的最大arr_date和unload_date(姓名,auto_num,seal_num),然后检查是否等于行两列,选择它。

0

我猜你寻求的nameauto_numseal_num每个不同组合的最新arr_dateunload_date。但是你没有解释你的桌子的内容,所以我可能猜错了。

SQL Fiddle

该查询给你。它确实是而不是给出了行ID,因为最新的arr_date和最新的unload_date可能来自不同的行。

select name, auto_num, seal_num, 
     MAX(arr_date) arr_date, MAX(unload_date) unload_date 
    from testtab 
group by name, auto_num, seal_num 

Results

|  name |  auto_num | seal_num |   arr_date |  unload_date | 
|----------|--------------|----------|-------------------|-------------------| 
| contain1 | AT0000004815 | CN44178 | December, 28 2014| December, 28 2014| 
| contain2 | AT0000000227 | CG11818 | September, 12 2015| September, 14 2015| 
| contain3 | AT0000005297 | FG1005G | January, 25 2015| January, 27 2015| 
+0

谢谢您的回答,我有一些其他领域(共23场)也为其他此查询没有得到正确的(相应的)值实际应用字段 示例id字段需要返回2,7,9,但其返回1,5,9 – raj