我有一个如下表:
+-------------+--------------+
| current_day | browser |
+-------------+--------------+
| 2016-05-02 | Safari |
| 2016-05-03 | Safari |
| 2016-05-04 | Safari |
| 2016-05-05 | Safari |
| 2016-05-06 | Safari |
| 2016-05-07 | Safari |
| 2016-05-08 | Safari |
| 2016-05-09 | Opera |
| 2016-05-10 | Opera |
| 2016-05-11 | Opera |
| 2016-05-12 | Opera |
| 2016-05-13 | Opera |
| 2016-05-14 | Opera |
| 2016-05-15 | Chrome |
| 2016-05-16 | Firefox |
| 2016-05-17 | Firefox |
| 2016-05-18 | Firefox |
| 2016-05-19 | Firefox |
| 2016-05-20 | Firefox |
| 2016-05-21 | Firefox |
| 2016-05-22 | Firefox |
| 2016-05-23 | Safari |
| 2016-05-24 | Safari |
| 2016-05-25 | Safari |
| 2016-05-26 | Safari |
| 2016-05-27 | Safari |
| 2016-05-28 | Safari |
| 2016-05-29 | Safari |
| 2016-05-30 | Opera |
| 2016-05-31 | Opera |
| 2016-06-01 | Opera |
| 2016-06-02 | Firefox |
| 2016-06-03 | Firefox |
| 2016-06-04 | Firefox |
| 2016-06-05 | Firefox |
| 2016-06-06 | Firefox |
| 2016-06-07 | Firefox |
| 2016-06-08 | Firefox |
| 2016-06-09 | Chrome |
| 2016-06-10 | Chrome |
| 2016-06-11 | Chrome |
| 2016-06-12 | Chrome |
| 2016-06-13 | Chrome |
| 2016-06-14 | Chrome |
| 2016-06-15 | Chrome |
| 2016-06-16 | Chrome |
+-------------+--------------+
我想提取“浏览器”列中每个序列的第一次和最后一次出现,换句话说,结果如下:
+-------------+--------------+
| current_day | browser |
+-------------+--------------+
| 2016-05-02 | Safari |
| 2016-05-08 | Safari |
| 2016-05-09 | Opera |
| 2016-05-14 | Opera |
| 2016-05-15 | Chrome |
| 2016-05-16 | Firefox |
| 2016-05-22 | Firefox |
| 2016-05-23 | Safari |
| 2016-05-29 | Safari |
| 2016-05-30 | Opera |
| 2016-06-01 | Opera |
| 2016-06-02 | Firefox |
| 2016-06-08 | Firefox |
| 2016-06-09 | Chrome |
| 2016-06-16 | Chrome |
+-------------+--------------+
是否可以/方便地创建 MYSQL 查询?还是提取所有结果并使用 php 执行一些后处理更好?
最佳答案
您可以使用以下查询:
SELECT MIN(current_day) AS start_day,
MAX(current_day) AS stop_day,
browser
FROM (
SELECT current_day, browser,
@grp := IF(@br = browser, @grp,
IF(@br := browser, @grp+1, @grp+1)) AS grp
FROM mytable
CROSS JOIN (SELECT @grp := 0, @br := '') AS vars
ORDER BY current_day) AS t
GROUP BY browser, grp
上述查询使用变量,以识别具有相同 browser 值的连续记录的孤岛。它为每个浏览器返回一行。
如果您想为每个最小/最大日期获取两个 单独的行,则必须重复相同的子查询两次并使用UNION。
关于mysql - 按第一次和最后一次出现分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37882795/
在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
假设我有一个在Ruby中看起来像这样的哈希:{:ie0=>"Hi",:ex0=>"Hey",:eg0=>"Howdy",:ie1=>"Hello",:ex1=>"Greetings",:eg1=>"Goodday"}有什么好的方法可以将它变成如下内容:{"0"=>{"ie"=>"Hi","ex"=>"Hey","eg"=>"Howdy"},"1"=>{"ie"=>"Hello","ex"=>"Greetings","eg"=>"Goodday"}} 最佳答案 您要求一个好的方法来做到这一点,所以答案是:一种您或同事可以在六个月后理解
我写了一个非常简单的rake任务来尝试找到这个问题的根源。namespace:foodotaskbar::environmentdoputs'RUNNING'endend当在控制台中执行rakefoo:bar时,输出为:RUNNINGRUNNING当我执行任何rake任务时会发生这种情况。有没有人遇到过这样的事情?编辑上面的rake任务就是写在那个.rake文件中的所有内容。这是当前正在使用的Rakefile。requireFile.expand_path('../config/application',__FILE__)OurApp::Application.load_tasks这里
我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm
我是HanamiWorld的新人。我已经写了这段代码:moduleWeb::Views::HomeclassIndexincludeWeb::ViewincludeHanami::Helpers::HtmlHelperdeftitlehtml.headerdoh1'Testsearchengine',id:'title'hrdiv(id:'test')dolink_to('Home',"/",class:'mnu_orizontal')link_to('About',"/",class:'mnu_orizontal')endendendendend我在模板上调用了title方法。htm
-if!request.path_info.include?'A'%{:id=>'A'}"Text"-else"Text"“文本”写了两次。我怎样才能只写一次并同时检查path_info是否包含“A”? 最佳答案 有两种方法可以做到这一点。使用部分,或使用content_forblock:如果“文本”较长,或者是一个重要的子树,您可以将其提取到一个部分。这会使您的代码变干一点。在给出的示例中,这似乎有点矫枉过正。在这种情况下更好的方法是使用content_forblock,如下所示:-if!request.path_info.inc
啊,正则表达式有点困惑。我正在尝试删除字符串末尾所有可能的标点符号:ifstr[str.length-1]=='?'||str[str.length-1]=='.'||str[str.length-1]=='!'orstr[str.length-1]==','||str[str.length-1]==';'str.chomp!end我相信有更好的方法来做到这一点。有什么指点吗? 最佳答案 str.sub!(/[?.!,;]?$/,'')[?.!,;]-字符类。匹配这5个字符中的任何一个(注意,。在字符类中并不特殊)?-前一个字符或组