我有一个项目数据库.每个项目都使用类别表中的类别ID进行分类.我正在尝试创建一个列出每个类别的页面,在每个类别下面我想要显示该类别中的4个最新项目.
例如:
宠物用品
img1
img2
img3
img4
Run Code Online (Sandbox Code Playgroud)
宠物食品
img1
img2
img3
img4
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过查询每个类别的数据库轻松解决这个问题,如下所示:
SELECT id FROM category
然后迭代该数据并查询每个类别的数据库以获取最新的项目:
SELECT image FROM item where category_id = :category_id ORDER BY date_listed DESC LIMIT 4
我想弄清楚的是,如果我可以使用1个查询并获取所有数据.我有33个类别,所以我想也许这有助于减少对数据库的调用次数.
任何人都知道这是否可行?或者,如果33次通话不是那么大,我应该这么简单.
在我的Ruby on Rails应用程序中,我有一个像这样的数据库结构:
Project.create(:group => "1", :date => "2014-01-01")
Project.create(:group => "1", :date => "2014-01-02")
Project.create(:group => "1", :date => "2014-01-03")
Project.create(:group => "2", :date => "2014-01-01")
Project.create(:group => "2", :date => "2014-01-02")
Project.create(:group => "2", :date => "2014-01-03")
# and so forth...
Run Code Online (Sandbox Code Playgroud)
如何group使用ActiveRecord 获取每个记录的最新记录?
解决方案可能很简单,但我无法理解这一点.
谢谢你的帮助.
我有一个相当有趣的情况.我有一个充满地址和消息的SQLite数据库(地址不是唯一的;消息是).每条消息还有一个与之关联的日期.我想要做的是选择第一个消息的地址,消息,日期以及与该地址关联的消息数量.
所以,我想,"我可以通过集团的地址只有每个地址得到一个消息,然后按日期顺序这些,也获取地址栏的数量."
我这样做了,它有效......有点儿.它获取正确的计数,每个地址只获取一条消息,并按日期排序 - 但它不会选择该地址的最新消息.这似乎是武断的.
例如,我有三条消息(最早到最晚)来自地址Y的A,B,C和来自地址Z的三条消息D,E,F.查询可以获取消息B和E,然后按日期对它们进行排序.它应该获取消息C和F,并按日期对它们进行排序.
这是我到目前为止:
// Expanded version:
Cursor cursor = db.query(
/* FROM */ "messages_database",
/* SELECT */ new String[]{ "*", "COUNT(address) AS count" },
/* WHERE */ null,
/* WHERE args */ null,
/* GROUP BY */ "address",
/* HAVING */ null,
/* ORDER BY */ "date DESC"
);
// Or, same code on one line:
Cursor cursor = db.query("messages_database", new String[]{ "*", "COUNT(address) AS count" …Run Code Online (Sandbox Code Playgroud) 我试图从一列中选择最大值,同时按另一个具有多个重复值的非唯一id列进行分组.原始数据库看起来像:
mukey | comppct_r | name | type
65789 | 20 | a | 7n
65789 | 15 | b | 8m
65789 | 1 | c | 1o
65790 | 10 | a | 7n
65790 | 26 | b | 8m
65790 | 5 | c | 1o
...
Run Code Online (Sandbox Code Playgroud)
这适用于:
SELECT c.mukey, Max(c.comppct_r) AS ComponentPercent
FROM c
GROUP BY c.mukey;
Run Code Online (Sandbox Code Playgroud)
返回一个表格如下:
mukey | ComponentPercent
65789 | 20
65790 | 26
65791 | 50
65792 | 90
Run Code Online (Sandbox Code Playgroud)
我希望能够在不影响GROUP BY功能的情况下添加其他列,在输出表中包含名称和类型等列,如: …
我想要一个MySql查询获得5行,其中包括最小价格行,最大价格行和其他3个随机行.
表:
ID Product Price
1 data 2
2 data 20
3 data 55
4 data 24
5 data 2
6 data 15
7 data 10
8 data 33
9 data 3
10 data 30
Run Code Online (Sandbox Code Playgroud)
预期结果(随机3行)
ID Product Price
1 data 2
3 data 55
4 data 24
6 data 15
7 data 10
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!
除了find_by_sql之外,有没有办法在ActiveRecord中使用EXISTS?
我想要一个很好的方法来找到一对多关系中没有关联的所有记录.
SELECT DISTINCT store_type FROM stores
WHERE NOT EXISTS (SELECT * FROM cities_stores
WHERE cities_stores.store_type = stores.store_type)
Run Code Online (Sandbox Code Playgroud) 我有一个表,其中包含产品信息,其中包含具有相同标题的产品的多个实例,由不同颜色及其ID标识.我需要输出整个行,其中id =按标题分组的最大ID,但我似乎无法做到这一点.这是一个非常简化的表和一些示例数据:
id title colour description
1 rico red blah1
2 rico blue blah2
3 rico yellow blah3
4 katia black blah4
5 katia white blah5
Run Code Online (Sandbox Code Playgroud)
在我的代码的这个例子中,当我想要3个rico黄色blah3时,我得到1个rico red blah1.
这是我正在使用的代码:
SELECT pd_id, pd_title, pd_description, pd_colour,
pd_price,pd_large_image,pd_date,cat_sub_id_3,pd_new
FROM product
WHERE
cat_sub_id_1 = '".$cat_sub_id."'
AND cat_parent_id='".$cat_parent_id."'
GROUP BY pd_title
HAVING MAX(pd_id)
ORDER BY pd_id DESC
Run Code Online (Sandbox Code Playgroud)
更新:谢谢你们,
我使用alinoz的答案来提出以下代码,它有效:)
SELECT
pd_id,pd_title,pd_description,pd_colour,pd_price,pd_large_image,pd_date,cat_sub_id_3,pd_new
FROM product
HERE cat_sub_id_1 = '".$cat_sub_id."' AND cat_parent_id='".$cat_parent_id."'
AND pd_id IN (
SELECT max(pd_id)
FROM product
WHERE cat_sub_id_1 = '".$cat_sub_id."' AND cat_parent_id='".$cat_parent_id."'
GROUP …Run Code Online (Sandbox Code Playgroud) 在SpringBoot微服务中,我试图为每个mean_of_payment_id选择一个actor的最新记录.为此,请使用mean_of_payment_id上的group by子句为actor_id选择actor内容,其中created_date等于max(created_date)嵌套查询的子集.我正在使用JPQL.下面是表结构和查询.
@Query("select ac from ActorContent ac "
+ "where (ac.actor.uuid=:actorUuid ) and "
+ "ac.createdDate IN ( SELECT MAX(aci.createdDate) "
+ "FROM ActorContent aci WHERE ac.actor.uuid=aci.actor.uuid "
+ "and aci.uuid = ac.uuid group by ac.meanOfPayment.id)"
)
Run Code Online (Sandbox Code Playgroud)
不幸的是,在执行查询后,我得到了所有记录,但我期待的是前三行.MeanOfPayment和Actor是ActorContent的引用表.
初始表是这样的:
Fruit | Item_ID | Production_line | Amount_produced | Production_date
---------------------------------------------------------------
Apples | 652 | 1 | 24 | 2016-05-12
Pears | 455 | 4 | 54 | 2016-05-16
Pears | 455 | 2 | 26 | 2016-05-13
Apples | 652 | 6 | 65 | 2016-05-14
Apples | 652 | 3 | 24 | 2016-05-21
Pears | 455 | 7 | 54 | 2016-05-17
Pears | 455 | 5 | 26 | 2016-05-15
Apples | 652 | 8 | …Run Code Online (Sandbox Code Playgroud) 我有一个表,每个ID重复3次.每行中每个id前面都有一个日期.
我想为最新日期的每个ID选择整行.此表中共有370列我希望在选择该行时选择所有列.
样品 -
ID Name Date Marks .. .. ..
1 XY 4/3/2017 27
1 fv 4/3/2014 98
1 jk 4/3/2016 09
2 RF 4/12/2015 87
2 kk 4/3/2009 56
2 PP 4/3/2011 76
3 ee 4/3/2001 12
3 ppp 4/3/2003 09
3 lll 4/3/2011 23
Run Code Online (Sandbox Code Playgroud)
答案应该是
ID Name Date Marks .. .. ..
1 XY 4/3/2017 27
2 RF 4/12/2015 87
3 lll 4/3/2011 23
Run Code Online (Sandbox Code Playgroud)
我正在尝试如下 -
select distinct ID,*,max(date) as maxdate from table
Run Code Online (Sandbox Code Playgroud)
我也是在Hive中尝试这个.所以不确定某些sql函数是否在Hive中不起作用
谢谢
sql ×6
mysql ×5
activerecord ×2
android ×1
group-by ×1
hive ×1
jpa ×1
jpql ×1
max ×1
ms-access ×1
php ×1
phpmyadmin ×1
ruby ×1
spring-data ×1
sqlite ×1