正如标题所示,我想选择用a组成的每组行的第一行GROUP BY.
具体来说,如果我有一个purchases看起来像这样的表:
SELECT * FROM purchases;
我的输出:
id | customer | total ---+----------+------ 1 | Joe | 5 2 | Sally | 3 3 | Joe | 2 4 | Sally | 1
我想查询每个产品id的最大购买量(total)customer.像这样的东西:
SELECT FIRST(id), customer, FIRST(total)
FROM  purchases
GROUP BY customer
ORDER BY total DESC;
预期产出:
FIRST(id) | customer | FIRST(total)
----------+----------+-------------
        1 | Joe      | 5
        2 | Sally    | 3
 我有一个关于pgsql的表,其名称(超过1 mio.行),但我也有很多重复.我选择3个字段:id,name,metadata.
我想用ORDER BY RANDOM()和随机选择它们LIMIT 1000,所以我这样做是为了在我的PHP脚本中保存一些内存.
但是我怎么能这样做,所以它只给我一个名单上没有重复的列表.
例如,[1,"Michael Fox","2003-03-03,34,M,4545"]将返回但不是[2,"Michael Fox","1989-02-23,M,5633"].名称字段是最重要的,每次我选择时都必须在列表中是唯一的,它必须是随机的.
我试过GROUP BY name,然后它希望我在GROUP BY同样或在aggragate函数中有id和元数据,但我不想让它们以某种方式过滤.
任何人都知道如何获取许多列,但只在一列上做一个不同的?
我需要按日期/时间字段对PostgreSQL表进行排序,例如last_updated.
但是,该字段允许为空或空,我想与空记录last_updated来之前,非空last_updated.
这可能吗?
order by last_updated asc /* and null last_updated records first ?? */
ActionView :: Template :: Error(PG ::错误:错误:对于SELECT DISTINCT,ORDER BY表达式必须出现在选择列表中
我正在创建一个事件网站,我正在尝试按事件的开始时间对呈现的rsvps进行排序.有很多RSVPS,所以我将它们分组,但我在过去的几天里在排序结果时遇到了很多困难而没有在PG上弹出这个错误.我已经看了一些关于这个主题的先前问题,但我仍然很丢失.我怎样才能让它发挥作用?非常感谢!
@rsvps = Rsvp.where(:voter_id => current_user.following.collect {|f| f["id"]}, :status => 'going').where("start_time > ? AND start_time < ?", Time.now, Time.now + 1.month).order("count_all desc").count(:group => :event_id).collect { |f| f[0] }
<%= render :partial => 'rsvps/rsvp', :collection => Rsvp.where(:event_id => @rsvps).select("DISTINCT(event_id)").order('start_time asc') %>
我怎么能这样做order_by......
p = Product.objects.filter(vendornumber='403516006')\
                   .order_by('-created').distinct('vendor__name')
问题是我有多个同名的供应商,我只想要供应商的最新产品.
希望有道理吗?
我收到了这个DB错误:
SELECT DISTINCT ON表达式必须匹配初始ORDER BY表达式LINE 1:SELECT DISTINCT ON("search_vendor"."name")"search_product"...
与 - PostgreSQL DISTINCT ON有关,使用不同的ORDER BY
我有桌子购买(product_id,purchase_at,address_id)
样本数据:
| id | product_id |   purchased_at    | address_id |
| 1  |     2      | 20 Mar 2012 21:01 |     1      |
| 2  |     2      | 20 Mar 2012 21:33 |     1      |
| 3  |     2      | 20 Mar 2012 21:39 |     2      |
| 4  |     2      | 20 Mar 2012 21:48 |     2      |
我期望的结果是每个address_id的最近购买的产品(完整行),并且结果必须由downloaded_at字段以后代顺序排序:
| id | product_id |   purchased_at    | address_id |
| 4  |     2      | …我想获得每个客户的最新购买清单,按日期排序.
以下查询执行我想要的日期除外:
(Purchase.objects
         .all()
         .distinct('customer')
         .order_by('customer', '-date'))
它会产生如下查询:
SELECT DISTINCT ON 
    "shop_purchase.customer_id" 
    "shop_purchase.id" 
    "shop_purchase.date" 
FROM "shop_purchase" 
ORDER BY "shop_purchase.customer_id" ASC, 
         "shop_purchase.date" DESC;
我被迫使用customer_id作为第一个ORDER BY表达因为DISTINCT ON.
我想按日期排序,所以我真正需要的查询应该是这样的:
SELECT * FROM (
  SELECT DISTINCT ON 
      "shop_purchase.customer_id" 
      "shop_purchase.id" 
      "shop_purchase.date" 
  FROM "shop_purchase" 
  ORDER BY "shop_purchase.customer_id" ASC, 
           "shop_purchase.date" DESC;
  )
AS result 
ORDER BY date DESC;
我不想使用python排序,因为我仍然需要页面限制查询.数据库中可能有数万行.
实际上它现在在python中排序,并且导致非常长的页面加载时间,所以这就是我试图解决这个问题的原因.
基本上我想要这样的东西/sf/answers/685727311/.是否可以用django查询集来表达它而不是编写原始SQL?
实际的模型和方法有几页长,但这里是上面的查询集所需的模型集.
class Customer(models.Model):
  user = models.OneToOneField(User)
class Purchase(models.Model):
  customer = models.ForeignKey(Customer)
  date = models.DateField(auto_now_add=True)
  item = models.CharField(max_length=255)
如果我有以下数据: …
我的要求是获得不同的记录并按顺序
User.joins('INNER JOIN report_posts ON posts.id = report_posts.post_id').select('DISTINCT ON (report_posts.post_id) posts.id as report_posts.id as reported_id, report_posts.reported_at').order('report_posts.reported_at desc')
我知道这是不可能的postgresql,我已经用不同的 ORDER BY阅读了这个Postgresql DISTINCT ON
我想要它的解决方案,我该怎么做,它的替代方式?
我在 PostgreSQL 中使用 Rails 4.2。我有一个Product模型和一个Purchase带有Product has many Purchases. 我想找到最近购买的独特产品。最初我尝试过:
Product.joins(:purchases)
.select("DISTINCT products.*, purchases.updated_at") #postgresql requires order column in select
.order("purchases.updated_at DESC")
然而,这会导致重复,因为它试图找到对 ( product.idand purchases.updated_at) 具有唯一值的所有元组。但是我只想id在加入后选择不同的产品。如果产品 ID 在连接中多次出现,请仅选择第一个。所以我也试过:
Product.joins(:purchases)
.select("DISTINCT ON (product.id) purchases.updated_at, products.*")
.order("product.id, purchases.updated_at") #postgres requires that DISTINCT ON must match the leftmost order by clause
这不起作用,因为我需要product.id在order子句中指定,因为这个约束会输出意外的顺序。
实现这一目标的轨道方式是什么?
sql postgresql ruby-on-rails greatest-n-per-group ruby-on-rails-4.2
postgresql ×9
sql ×3
distinct ×2
django ×2
ruby ×2
distinct-on ×1
group-by ×1
json ×1
jsonb ×1
nosql ×1
null ×1
select ×1
sql-order-by ×1
sqlite ×1