我们正在查询数据库以便以下列方式检索数据
从table1中选择a,b,... f,其中id为(6,33,1,78,2)
我从查询中得到的结果按顺序1,2,6,33,78.
我希望结果的顺序相同(6,33,1,78,2).有没有办法以相同的顺序检索数据.
编辑 *我正在使用SQL 2008*
我犯了一个错误并输入了:
SELECT * FROM table LIMIT1
代替
SELECT * FROM table LIMIT 1(注意之间的空间LIMIT和1)
在MySQL的CLI中.我希望收到某种解析错误,但我很惊讶,因为查询返回了表中的所有记录.我的第一个想法是"愚蠢的MySQL,我打赌这会在PostgreSQL中返回错误",但PostgreSQL也返回了所有记录.然后用SQLite测试它 - 结果相同.
经过一番挖掘,我意识到我在桌子后输入的内容并不重要.只要没有WHERE/ORDER/GROUP条款:
SELECT * FROM table SOMETHING -- works and returns all records in table
SELECT * FROM table WHERE true SOMETHING -- doesn't work - returns parse error
Run Code Online (Sandbox Code Playgroud)
我想这是一种标准化的行为,但我找不到任何解释为什么会这样.有任何想法吗?
----------
samples
----------
SamplesID
stylenumber
stylename
status
-----------
samples_details
-----------
Samples_Details_ID
SamplesID
CustomerName
date_out
date_returned
updated (timestamp)
status
------------
samples_pictures
------------
SamplesPicID
SamplesID
Run Code Online (Sandbox Code Playgroud)
尝试编写一个查询,该查询为我提供了示例的所有行,samples_pictures的所有匹配项(如果有)以及samples_details的最新记录(如果有)。因此,有两个左外部联接,但一个仅检索最新记录。
什么不起作用:
SELECT samples.*
, samples_pictures.SamplesPicID
, CustomerName
, date_out
, date_returned
, updated
, samples_details.status as txn_status
FROM samples
LEFT OUTER JOIN
( SELECT Samples_Details_ID
, samples_details.status as txn_status
, MAX(updated) as MaxUpdated
FROM samples_details
GROUP BY Samples_Details_ID
) AS MaxTable
ON MaxTable.SamplesID = samples.SamplesID
LEFT OUTER JOIN samples_pictures
ON samples.SamplesID = samples_pictures.SamplesID
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!
我使用Twisted框架为自己写了一个不错的应用程序.我使用如下命令启动它:
twistd -y myapp.py --pidfile=/var/run/myapp.pid --logfile=/var/run/myapp.log
Run Code Online (Sandbox Code Playgroud)
它很棒=)
为了启动我的应用程序,我用这个命令编写了一个脚本,因为我很懒惰^^但是因为我使用相同的twistd选项启动我的应用程序,并且我修改脚本shell解决方案是丑陋的,我怎么能做同样但在我的应用程序内?我想通过刚刚完成./myapp并且没有shell工作来启动我的应用程序.
我试图在扭曲的文档和阅读扭曲的源代码中搜索它,但我不明白它,因为它是我的第一个Python应用程序(精彩的语言顺便说一句!)
在此先感谢任何帮助.
这对我来说感觉像是一个初学SQL问题,但是这里有.这就是我想要做的:
我已经描述了本文底部涉及的表格,但这是我正在执行的查询
SELECT p.*, GROUP_CONCAT(pt.name)
FROM products p
LEFT JOIN product_tags_for_products pt4p ON (pt4p.product_id = p.id)
LEFT JOIN product_tags pt ON (pt.id = pt4p.product_tag_id)
GROUP BY p.id
ORDER BY p.created
LIMIT 30;
Run Code Online (Sandbox Code Playgroud)
有大约280,000个产品,130个标签,524,000个链接记录,我已经分析了表格.问题是它需要花费80多秒才能运行(在合适的硬件上),这对我来说是错误的.
这是EXPLAIN的结果:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE p index NULL created 4 NULL 30 "Using temporary"
1 SIMPLE pt4p ref idx_product_tags_for_products idx_product_tags_for_products 3 s.id 1 "Using index"
1 SIMPLE pt eq_ref PRIMARY PRIMARY 4 …Run Code Online (Sandbox Code Playgroud) 任何人都可以帮助一些SQL查询代码来提供三阶多项式回归的系数估计吗?
请假设我有一个X和Y数据值表,并想要估算a,b和c:
Y(X) = aX + bX^2 + cX^3 + E
Run Code Online (Sandbox Code Playgroud) 如何获得TypeID具有最大值的不同行EffectivityDate?
-----------------------------------------
| ID | TypeID | Value | EffectivityDate |
-----------------------------------------
| 1 | 1 | 2.3 | 1990-01-01 |
| 2 | 1 | 3.4 | 1999-10-31 |
| 3 | 2 | 1.1 | 1990-01-01 |
| 4 | 2 | 2.2 | 1999-10-31 |
| 5 | 3 | 6.1 | 1999-10-31 |
-----------------------------------------
Run Code Online (Sandbox Code Playgroud)
-----------------------------------------
| ID | TypeID | Value | EffectivityDate |
-----------------------------------------
| 2 | 1 | …Run Code Online (Sandbox Code Playgroud) 我有一个数据库表,维护一些信息,并需要保留订单.基本上如果我列出了元素1到5,并且我想添加一个新元素,那么它可以插入到现有行中的任何位置,可以是最后一个,5之后,1之前的开始或中间的某个位置,例如3之后有没有办法使用MySQL INSERT语句并指定我们应该在哪一行插入索引?
我认为不是.所以我的策略是创建另一个列'order_number',它基本上记录了元素的顺序.例如,如果记录表具有主键(record_id)和并排列出的order_number,它将如下所示:
record_id order_number
1 1
2 2
3 3
4 4
5 5
Run Code Online (Sandbox Code Playgroud)
要在第3行之后向此行添加新元素,生成的结束表将如下所示:
record_id order_number
1 1
2 2
3 3
**6** **4** <------ added row
4 **5** <-- changed order_number
5 **6** <-- changed order_number
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我可以通过简单地选择我想要的数据并提供Order By order_number asc子句来清楚地实现我想要的顺序.
但是,正如您所看到的,要做一个简单的Insert,它需要我更新它之后出现的每个其他行的order_number.该表预计至少具有大量的行(大小为100,000),并且在每次单个插入操作时简单地更新每隔一行(因此锁定表)根本不可行.
在这种情况下,什么是更好的推荐策略?
--------------------这需要4秒才能执行(有2000 000行)为什么?---------------- -----
DECLARE @AccountId INT
DECLARE @Max INT
DECLARE @MailingListId INT
SET @AccountId = 6730
SET @Max = 2000
SET @MailingListId = 82924
SELECT TOP (@Max) anp_Subscriber.Id , Name, Email
FROM anp_Subscription WITH(NOLOCK)
INNER JOIN anp_Subscriber WITH(NOLOCK)
ON anp_Subscriber.Id = anp_Subscription.SubscriberId
WHERE [MailingListId] = @MailingListId
AND Name LIKE '%joe%'
AND [AccountID] = @AccountId
Run Code Online (Sandbox Code Playgroud)
---------------------这需要<1秒才能执行(有2000 000行)---------------- -------
SELECT TOP 2000 anp_Subscriber.Id ,Name, Email
FROM anp_Subscription WITH(NOLOCK)
INNER JOIN anp_Subscriber WITH(NOLOCK)
ON anp_Subscriber.Id = anp_Subscription.SubscriberId
WHERE [MailingListId] = 82924
AND Name …Run Code Online (Sandbox Code Playgroud) 我想在GROUP BY中获取一些记录子集,我已经看到了很多疯狂的解决方案,但它们看起来太复杂了,有没有更有效的方法来做到这一点.
SELECT user_id, GROUP_CONCAT(item_id ORDER BY `timestamp`) AS items
FROM wb_user_book_current_item GROUP BY user_id
Run Code Online (Sandbox Code Playgroud)
所以这将返回给我所有用户的所有当前项目,这是目前为止还可以.但我只想要十件最新的东西.添加ORDER BY到GROUP_CONCAT帮助,但它仍然没有给我最后十条记录.
编辑
如果我做这样的事情和硬编码user_id然后我可以得到我想要的那个用户的结果,问题是结合它,所以我不需要硬编码,user_id并且可以例如只是让所有用户最后十个项目
SELECT GROUP_CONCAT(cp2.item_id) AS items
FROM (SELECT cp.user_id, cp.item_id
FROM wb_user_book_current_item cp
WHERE cp.user_id=1 ORDER BY cp.`timestamp`
LIMIT 10) AS cp2
GROUP BY cp2.user_id
Run Code Online (Sandbox Code Playgroud)