我是 JOOQ 的新手。我有一个用例,我需要从表中选择具有最新时间戳字段值的行。
我的表按事件日期分区。所以当我查询表时,我得到了同一个 ID 的多条记录。现在我不想为同一个 ID 获取很多记录,而是我只需要返回一个具有最新时间戳字段值的记录。
使用基本的 SQL 语法我能够实现这一点,但我无法通过 JOOQ 实现它。
SQL:
select *
from abc.student t
inner join (
select id, max(event_date) as MaxDate
from abc.student group by id
) tm on t.id = tm.id and t.event_date = tm.MaxDate ;
Java:
public Iterable<MyClass> fetchMyRecords(Iterable<String> MyIds) {
return dslContext.selectFrom(MYTABLE)
WHERE(MYTABLE.ID.in(List.newArrayList(ids)))
.fetchInto(MyObject.class);
}
预期结果:如何获得 List<MyClass>其中有不同的 MyClass对象和每个不同的对象是具有最新时间戳值的记录?我的表有一个名为 timestamp 的字段,基于我需要实现此目的。
更新问题
假设我必须从所有分区中获取具有最新 event_date 的学生列表。下面是我编写的 Jooq 查询,但它只返回一个 MyStudent 类型的对象。
问题 - 如何对特定 ID 应用限制。给定 n 个 id 列表,我需要获取 n 个 Mystudent 对象,其中每个对象都有最大 event_date
下面是只返回 1 个对象的查询
我还有一个问题,我如何在没有加入的情况下执行此操作。以下是仅适用于一个 id 的 Jooq 代码。但是我的函数接受 ID 列表并从表中获取记录。
public Iterable<MyClass> fetchMyRecords(Iterable<String> MyIds) {
return dslContext.select().from(TABLE)
.where(TABLE.ID.in(Lists.newArrayList(ids)))
.orderBy(TABLE.EVENT_DATE.desc())
.limit(1)
.fetchInto(MyStudent.class); }
因此给定一组 3 个 id(例如),我如何获取 3 个 Mystudent 类对象,其中每个对象都是(event_date)记录的最大值。如果我使用限制,它只会返回第一个 id 记录。如果我不使用限制,它将返回所有旧的 ID 重复行。
最佳答案
我正在将您的评论中的查询翻译成 jOOQ:
// Assuming these static imports
import static org.jooq.impl.DSL.*;
import static com.example.generated.Tables.*;
Student t = STUDENT.as("t");
Field<Date> maxDate = max(STUDENT.EVENT_DATE).as("MaxDate");
Table<?> tm = table(select(STUDENT.ID, maxDate)
.from(STUDENT)
.groupBy(STUDENT.ID)).as("tm");
ctx.select()
.from(t)
.join(tm)
.on(t.ID.eq(tm.field(STUDENT.ID)))
.and(t.EVENT_DATE.eq(tm.field(maxDate)))
.fetch();
关于mysql - 从表中选择具有最新时间戳的行的 JOOQ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54484208/
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur