当前位置: 首页 > 知识库问答 >
问题:

MYSQL查询只需要获取按字段分组的日期值

艾心远
2023-03-14

我的桌子如下所示

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分组中的max date值:name、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

我想在这里使用什么查询请帮助我,

共有2个答案

平学
2023-03-14

我猜您正在为名称自动编号密封编号的每个不同组合寻找最新的到达日期卸载日期。但是您没有解释表中的内容,所以我可能猜错了。

SQL小提琴

这个查询给了你这个。它没有给出行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

结果:

|     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|
许鸿志
2023-03-14

您可以这样做:

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)

这将为每个组合(名称、自动编号、密封编号)选择最大到货日期和卸货日期,然后检查行中两列是否相等,选择它。

 类似资料:
  • 问题内容: 我在MySQL中有一张表,该表显示了我每天记录的小时数。我正在尝试建立一个视图,该视图将允许我按块/天范围快速将数据分组。最简单的情况是每月一次,这并不难。我可以将日期选择为“%y-%m”,然后按该列分组。 前任: 如果我按月分组,那很好。但是我的问题是,我需要从每月的13号到下个月的12号进行分组(例如:7月13日至8月12日,8月13日至9月12日,等等)。 有没有一种简单的方法可

  • 我尝试创建一个查询,显示入住和退房日期之间的可用酒店。此外,当我为特定房间预订时,我将他们的预订列设置为1。这意味着,在现实生活中,当结账日期到来时,触发函数将该预订列设置成0。 如果酒店的所有房间都已预订(预订=1),并且这些房间的签入-退房日期是特定日期(签入-退房输入),则不要将该酒店放在列表中。我的查询不会显示我想要的结果。 查询:输入:国家(状态)、签入和签出。 当我运行查询时,它总是显

  • 问题内容: 我有这个SQL查询: 结果是这样的: 我现在的问题是我无法将DateCreated分组,因为它具有不同的时间。 我只想按日期分组。范例:2010-09-12 谢谢并恭祝安康… 问题答案: 我认为值得单独发布以下内容: 使用char转换来削减超时日期(广播或转换为varchar)比使用慢。我制定了[完整的脚本和性能测试结果以支持此断言 另外,请注意,您的GROUP BY列表与SELECT

  • 我有一个疑问。我有一个表,其中有些记录重复日期时间。我必须把最后一个从日期时间重复的地方拿来。示例: 它应该返回ID3、4和7 你能帮我吗?谢谢!

  • 在SQL中,如何按查询分组获取计数中的最小/最大日期? 查询: --这并没有给出文件的最小和最大接收日期 预期输出...与SourceId、Count、StartDate(最小值)、EndDate(最大值)一起

  • 我有一个熊猫DataFrame看起来像这样: 我的目标是能够为每个项目计算每个日期之间的价值差异。例如,我想找到A项: 12(32-20,因为最大年份是2012年,最小年份是2010年)和B项:20 (40 - 20,因为最大年份是2019年,最小年份是2016年)。 我使用以下代码获取每个项目的年最大值和年最小值: 然后,我找到每个项目的年份最小值和年份最大值。然而,我坚持做我想要的。