我有这个文件表(这里是简化版):
+------+-------+--------------------------------------+
| id | rev | content |
+------+-------+--------------------------------------+
| 1 | 1 | ... |
| 2 | 1 | ... |
| 1 | 2 | ... |
| 1 | 3 | ... |
+------+-------+--------------------------------------+
Run Code Online (Sandbox Code Playgroud)
如何为每个id选择一行并且只选择最大转速?
使用上面的数据,结果应该包含两行:[1, 3, ...]和[2, 1, ..].我正在使用MySQL.
目前,我在while循环中使用检查来检测并覆盖结果集中的旧转速.但这是实现结果的唯一方法吗?是不是有SQL解决方案?
更新
作为答案提示,有是一个SQL的解决方案,并且这里sqlfiddle演示.
更新2
我注意到在添加上述sqlfiddle之后,问题被投票的速率超过了答案的upvote率.那不是故意的!小提琴是基于答案,特别是接受的答案.
mysql sql aggregate-functions greatest-n-per-group groupwise-maximum
我读了许多关于只获得左连接的第一行的线程,但是,由于某种原因,这对我不起作用.
这是我的结构(当然简化)
饲料
id | title | content
----------------------
1 | Feed 1 | ...
Run Code Online (Sandbox Code Playgroud)
艺术家
artist_id | artist_name
-----------------------
1 | Artist 1
2 | Artist 2
Run Code Online (Sandbox Code Playgroud)
feeds_artists
rel_id | artist_id | feed_id
----------------------------
1 | 1 | 1
2 | 2 | 1
...
Run Code Online (Sandbox Code Playgroud)
现在我想获得文章并加入第一位艺术家,我想到了这样的事情:
SELECT *
FROM feeds
LEFT JOIN feeds_artists ON wp_feeds.id = (
SELECT feeds_artists.feed_id FROM feeds_artists
WHERE feeds_artists.feed_id = feeds.id
LIMIT 1
)
WHERE feeds.id = '13815'
Run Code Online (Sandbox Code Playgroud)
只是为了获得feed_artists的第一行,但这已经不起作用了.
我无法使用TOP因为我的数据库而且我无法对结果进行分组,feeds_artists.artist_id因为我需要按日期对它们进行排序(我通过这种方式对结果进行分组,但结果不是最新的)
用OUTER …
我在我的本地WAMP服务器上有一个WordPress网站.但是当我将其数据库上传到实时服务器时,我收到错误
#1273 – Unknown collation: ‘utf8mb4_unicode_520_ci’
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激!
我试图使用UTF-8并遇到麻烦.
我尝试了很多东西; 这是我得到的结果:
????而不是亚洲人物.即使是欧洲文本,我也得到Se?or了Señor.Señor或新浪新闻为????.Sefor Señor.我究竟做错了什么?我该如何修复代码?我可以恢复数据,如果是,如何恢复?
像查询为什么SELECT (@sum:=(@var:=@sum)+some_table.val)...自动转换(@var:=@sum)到整数MySQL的≤5.5为DECIMAL型some_table.val和地板它DOUBLE/FLOAT?更改了哪些功能以允许5.6中的预期行为?
请考虑下表:
CREATE TABLE t (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
sum_component FLOAT
);
INSERT INTO t (sum_component) VALUES (0.5), (0.6), (0.4), (0.5);
Run Code Online (Sandbox Code Playgroud)
我正在设计一个累积和查询,它获取id累积和大于某个值的条目.通常,此查询符合条例草案:
SELECT t.id,
@cumulative_sum
FROM t
CROSS JOIN (SELECT @cumulative_sum:=0) a
WHERE (@cumulative_sum:=@cumulative_sum+t.sum_component) > 1.3
ORDER BY id ASC LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
...但我碰巧还需要在所选条目之前存储累积总和以及以后的计算,并且cumulative_sum从该查询中不返回预期结果,重复计算最后一个条目.在这种情况下,我希望此查询设置一个存储value 1.1(0.5 + 0.6)的变量,而不必进行额外的数学运算.
如果我在增量步骤中指定@cumulative_sumto 的旧值@another_variable,我应该能够做到这一点.
SELECT t.id,
@cumulative_sum …Run Code Online (Sandbox Code Playgroud) 我使用Spring Boot 2.X和Hibernate 5 在不同的服务器上连接两个不同的MySQL数据库(Bar和Foo).我试图从REST控制器中的方法列出实体的所有信息(自己的属性@OneToMany和@ManyToOne关系).
我已经按照几个教程来执行此操作,因此,我能够获取我的@Primary数据库(Foo)的所有信息,但是,在检索@OneToMany集合时,我总是得到我的辅助数据库(Bar)的例外.如果我将@Primary注释交换到Bar数据库,我可以从Bar数据库获取数据,但不能从Foo数据库获取数据.有办法解决这个问题吗?
这是我得到的例外:
...w.s.m.s.DefaultHandlerExceptionResolver :
Failed to write HTTP message: org.springframework.http.converter.HttpMessageNotWritableException:
Could not write JSON document: failed to lazily initialize a collection of role:
com.foobar.bar.domain.Bar.manyBars, could not initialize proxy - no Session (through reference chain: java.util.ArrayList[0]-com.foobar.bar.domain.Bar["manyBars"]);
nested exception is com.fasterxml.jackson.databind.JsonMappingException:
failed to lazily initialize a collection of role:
com.foobar.bar.domain.Bar.manyBars, could not initialize proxy - no Session (through reference chain: java.util.ArrayList[0]->com.foobar.bar.domain.Bar["manyBars"])
Run Code Online (Sandbox Code Playgroud)
我的application.properties:
# …Run Code Online (Sandbox Code Playgroud) 我们遇到了AWS Aurora故障转移问题,并正在寻找解决方法的指针。
情境
AWS Aurora设置了两个端点:
因此,我们的PDO MySQL连接字符串为stackName-dbcluster-ID.cluster-ID.us-west-2.rds.amazonaws.com(用于编写)
故障转移后
故障转移时,DNS条目将翻转为指向以下位置:
至关重要的是,PDO连接字符串(用于写入)仍然是相同的“ stackName-dbcluster-ID.cluster-ID.us-west-2.rds.amazonaws.com”,但指向不同的IP地址。
发生了什么
我们遇到了错误1290“ SQLSTATE [HY000]:一般错误:1290 MySQL服务器正在使用--read-only选项运行,因此它无法执行此语句”。
随着数据库引擎停止启动,我们的初始持久连接将“消失”并失效(我们将在重新连接/重试代码中立即进行处理)。
但是,上面的错误表示将向旧节点建立新连接,但随后不会随着DNS更改的传播而进一步失效。它们持续了10/15分钟(远远超出了DNS的TTL)。
我的问题
旁注
我们已经有适当的代码来处理重试,并且告诉他们重试以获得新的非持久连接(有效)。在这一点上,我们可以“无效” PDO连接,因此脚本的下一次运行不会一遍又一遍地重复此循环。
故障转移可以随时发生,因此我们无法执行手动操作,例如重新启动php(因为我们这次必须这样做)。
没有持久的连接,性能会明显降低。
FastCGI,Centos 16,PHP 7.2,MySQLD 5.0.12-dev(在Centos上是正常的-请参阅https://superuser.com/questions/1433346/php-shows-outdated-mysqlnd-version)
我正在开发一个位置应用程序,我需要从我的Mysql Location表中获取所有位置,它们之间的距离为5km.
对于Ex位置表,有以下条目:
id Latitude Longitude
1 22.7499180 75.8950577
2 22.7498474 75.8950653
3 22.7498035 75.8950424
4 22.7497787 75.8950729
5 22.7498245 75.8950806
6 22.7497902 75.8950272
7 22.7497864 75.8950424
8 22.7497768 75.8950500
9 22.7497864 75.8950577
10 22.7497921 75.8950653
11 22.7497597 75.8950653
12 22.7498283 75.8950653
13 22.7497978 75.8950577
Run Code Online (Sandbox Code Playgroud)
所以从上面的表格我需要获取这样的结果
id Latitude Longitude Distance (>=5Km)
1 22.7499180 75.8950577 --
4 22.7497787 75.8950729 6km (From lat long of id 1)
8 22.7497768 75.8950500 8km (From lat long of id 4)
11 22.7497597 75.8950653 6km (From …Run Code Online (Sandbox Code Playgroud) 我有简单但很长的查询,它计算结果的内容大约需要14秒.主表上的计数本身不到一秒钟,但在多次加入后,延迟太高,如下所示
Select Count(Distinct visits.id) As Count_id
From visits
Left Join clients_locations ON visits.client_location_id = clients_locations.id
Left Join clients ON clients_locations.client_id = clients.id
Left Join locations ON clients_locations.location_id = locations.id
Left Join users ON visits.user_id = users.id
Left Join potentialities ON clients_locations.potentiality = potentialities.id
Left Join classes ON clients_locations.class = classes.id
Left Join professions ON clients.profession_id = professions.id
Inner Join specialties ON clients.specialty_id = specialties.id
Left Join districts ON locations.district_id = districts.id
Left Join provinces ON districts.province_id = provinces.id
Left Join …Run Code Online (Sandbox Code Playgroud) 我正在学习更多关于mysqli和所有令人兴奋的东西的路径,但我很快就被阻止了.
我的debian盒子上有一个本地服务器.它是最新的,已安装php和mysql并顺利运行.我想在mysqli上学到更多东西,并尝试以下代码:
<?php
$db = new mysqli('localhost', 'userdb', 'pwuserdb', 'db');
if(!$db->set_charset('utf-8')) {
printf("Error setting the character set utf-8: %s\n", $db->error);
} else {
printf("Current character set is: %s\n", $db->character_set_name());
}
print_r($db->get_charset());
?>
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,在访问该页面时,我收到以下消息:
Error setting the character set utf-8: Can't initialize character set utf-8 (path: /usr/share/mysql/charsets/) stdClass Object ( [charset] => latin1 [collation] => latin1_swedish_ci [dir] => [min_length] => 1 [max_length] => 1 [number] => 8 [state] => 801 [comment] => cp1252 West European )
我认为这是合乎逻辑的,因为我没有将utf-8设置为mysql的标准字符集,所以我在my.cnf文件中完成了以下设置:
对于 [mysqld]
default-character-set=utf8
Run Code Online (Sandbox Code Playgroud)
对于 …