This isn't working with Sequel 4.49.0  (We have documented problems 
migration to v5 due to mis-resolution of symlinks.)

Non-consequential: in our code any class that subclasses Sequel::Model has 
a db connection via the `db` field

> ProcessModel.db.from{[processes.as(:p1), processes.as(:p2)]}
*** NoMethodError Exception: undefined method `as' for nil:NilClass

We have various workarounds for this, but generally prefer to use pure 
Sequel whenever possible.

Thanks,
Eric

On Monday, December 3, 2018 at 3:42:07 PM UTC-8, Jeremy Evans wrote:
>
> On Monday, December 3, 2018 at 1:54:54 PM UTC-8, Eric Promislow wrote:
>>
>> Hi,
>>
>> We want to find all but the most recent processes for each app based on 
>> the :created_at field.  Here's the raw SQL that works:
>>
>> mysql> select distinct p1.id 
>>        from processes p1 join processes p2 
>>        where p1.app_guid = p2.app_guid and 
>>              p1.created_at < p2.created_at;
>> +----+
>> | id |
>> +----+
>> |  1 |
>> |  2 |
>> +----+
>> 2 rows in set (0.01 sec)
>>
>> What's a good way to express this in Sequel?
>>
>
> Not familiar with that MySQL syntax, but I'm guessing it is a CROSS JOIN, 
> which you can handle by just using multiple FROM tables (Sequel also 
> supports the CROSS JOIN syntax explicitly):
>
> DB.from{[processes.as(:p1), processes.as(:p2)]}.
>   where{(p1[:app_guid] =~ p2[:app_guid]) & (p1[:created_at] < 
> p2[:created_at])}.
>   distinct.
>   select{p1[:id]}
>
> # SELECT DISTINCT `p1`.`id`
> # FROM `processes` AS `p1`, `processes` AS `p2`
> # WHERE ((`p1`.`app_guid` = `p2`.`app_guid`)
> # AND (`p1`.`created_at` < `p2`.`created_at`))
>
> Thanks,
> Jeremy
>

-- 
You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/d/optout.

Reply via email to