假设一个表如:
UID Name Datetime Users
4 Room 4 2012-08-03 14:00:00 3
2 Room 2 2012-08-03 14:00:00 3
3 Room 3 2012-08-03 14:00:00 1
1 Room 1 2012-08-03 14:00:00 2
3 Room 3 2012-08-03 14:15:00 1
2 Room 2 2012-08-03 14:15:00 4
1 Room 1 2012-08-03 14:15:00 3
1 Room 1 2012-08-03 14:30:00 6
1 Room 1 2012-08-03 14:45:00 3
2 Room 2 2012-08-03 14:45:00 7
3 Room 3 2012-08-03 14:45:00 8
4 Room 4 2012-08-03 14:45:00 4
Run Code Online (Sandbox Code Playgroud)
我希望从下午2点到下午3点获得每个房间(1,2,3,4)的平均用户数.问题是有时房间可能不会在15分钟的间隔时间"登记",因此必须假设前一个最后已知的用户计数仍然有效.
例如,2012-08-03 …
我需要一种方法来在一种窗口函数中对所有行(每组)进行串联,就像你可以做的那样COUNT(*) OVER(PARTITION BY...),每个组的所有行的聚合计数将在每个特定的组中重复.我需要类似的东西,但是每个组中重复的每个组的所有值的字符串连接.
这是一些示例数据和我想要的结果,以更好地说明我的问题:
grp | val
------------
1 | a
1 | b
1 | c
1 | d
2 | x
2 | y
2 | z
Run Code Online (Sandbox Code Playgroud)
这就是我需要的(期望的结果):
grp | val | groupcnct
---------------------------------
1 | a | abcd
1 | b | abcd
1 | c | abcd
1 | d | abcd
2 | x | xyz
2 | y | xyz
2 | z | xyz
Run Code Online (Sandbox Code Playgroud)
我的特殊情况使我无法两次引用同一个表(我实际上是在递归CTE中执行此操作,因此我无法对CTE进行自联接,否则会引发错误).
我完全清楚可以做一些事情:
SELECT a.*, b.groupcnct
FROM …Run Code Online (Sandbox Code Playgroud) 我有一张表说table1有3列column1, column2 and column3.
的column1和column2是一个FOREIGN KEY与其它2个表.但是,数据column3来自n个表.
例如,让我们考虑一下Facebook.要显示活动,它可能会维护一个可能具有user1 photoliked photo1或的表user1 statusliked status1.所以在这种情况下column3不能FOREIGN KEY用特定的表.
现在有两种获取真实数据的方法 -
第一路 -
SELECT user_id,
verb_id,
CASE WHEN verb_id = photoliked THEN
(SELECT photo_name FROM photos WHERE photo_id = column3) -- getting the desired data from the third column
WHEN verb_id = statusliked THEN
(SELECT status FROM statustable WHERE status_id = column3)
ELSE '' END AS performedon …Run Code Online (Sandbox Code Playgroud) 所以我试图运行一个将选择的查询,在这种情况下,没有预约的客户是X时间(例如2周).它归结为"向我展示一个未在2周内预约的客户名单".我试图通过做类似的事情来解决这个问题:
$date = new DateTime;
$ago = new DateInterval('P2W');
$target = $date->sub($ago);
//query to select clients that aren't scheduled after the $target date
$clients = ...;
Run Code Online (Sandbox Code Playgroud)
涉及两个表,appt_tbl和clients_tbl.appt_tbl为每个约会记录存储client_id.
基本上我需要的是为每个客户选择"最大"约会,如果它是<我的$目标日期,请将它们包含在查询结果中.我尝试了各种各样的查询,查询子查询,但我很难找到正确的查询.
我目前的尝试看起来像:
SELECT *
FROM clients_tbl
INNER JOIN
(
SELECT client_id
FROM appt_tbl
WHERE MAX(appt_date_time) < '2012-07-22'
GROUP BY client_id
) appts ON appts.client_id = clients_tbl.client_id;
Run Code Online (Sandbox Code Playgroud)
这还应该包括从未安排过的客户(IE不会出现在appt_tbl中),但不包括在接下来的两周内预约的客户.
就像一个非常简单的例子一样,假设我有一个test包含样本数据的表,如下所示:
a | b
-------------
1 | 18
1 | 24
1 | 64
1 | 82
1 | 10
1 | 7
2 | 5
2 | 18
2 | 66
2 | 72
3 | 81
3 | 97
Run Code Online (Sandbox Code Playgroud)
对于每一个a,我要计算有多少b是<50的结果.结果看起来像:
a | bcnt
--------------
1 | 4
2 | 2
3 | 0
Run Code Online (Sandbox Code Playgroud)
现在我可以用两种方式之一来实现这个结果:
SELECT a, COUNT(CASE WHEN b < 50 THEN 1 ELSE NULL END) AS bcnt
FROM test
GROUP BY …Run Code Online (Sandbox Code Playgroud) 我在MySQL数据库中有用户,他们的生日以DATE格式(yyyy-mm-dd)存储.我想在PHP中选择具有特定年龄范围的数据库中的用户.
我所拥有的是最低年龄(18岁)和最高年龄(21岁).我知道我可以和BETWEEN做点什么,但问题是我只知道岁月而不是日期.
有没有人有关于我如何做到这一点的建议?
这就是我目前正在做的事情:
function leeftijden($age) {
$morgen['day'] = date('d');
$morgen['month'] = date('m');
$morgen['year'] = date('Y') - $age;
$datum = $morgen['year'] .'-' .$morgen['month'].'-' .$morgen['day'];
return $datum;
}
Run Code Online (Sandbox Code Playgroud)
然后我这样做:
$maxDatum = leeftijden(18);
$minDatum = leeftijden(32);
$sqlRijder = "SELECT * FROM rijder WHERE geboortedatum between '".$minDatum."' AND '".$maxDatum."'";
Run Code Online (Sandbox Code Playgroud)
但这不是100%的工作.
我怎样才能选择18到21岁之间的用户?
我有一个表T的列x,y,a,b使得
SELECT x,y,a,b FROM T
ORDER BY x,y,a,b
Run Code Online (Sandbox Code Playgroud)
给我下表
x | y | a | b
x1 | y1 | a1 | b1
x1 | y1 | a1 | b2
x1 | y1 | a2 | b1
x1 | y2 | a1 | b1
x1 | y2 | a1 | b2
x1 | y2 | a2 | b1
Run Code Online (Sandbox Code Playgroud)
我如何获得每个x,y组的第一行?也就是说,我如何获得下表
x | y | a | b
x1 | y1 | …Run Code Online (Sandbox Code Playgroud) 我有一个简单的表单,我从一个MySQL表动态插入值:
<input type="text" name="title" value="1" size="45">
Run Code Online (Sandbox Code Playgroud)
该值="1"来自一个MySQL表,其id参数是自动递增的.所以以后id=1是2,3,4,5,6,7,8,9等
当我提交表单,它再次重装,但我想要的id是2下一次.然后第三次,它应该是3,然后4,然后5,等...
$res16 = sql_query("select * from mlf2_entries order by id desc limit 1 ");
$row = sql_fetch_array($res16);
$textqb = $row['id'];
Run Code Online (Sandbox Code Playgroud)
我试过这个,但它总是显示值="1"
mysql ×5
sql ×5
php ×4
average ×1
count ×1
date ×1
group-by ×1
join ×1
performance ×1
select ×1
sql-order-by ×1
sql-server ×1
sybase ×1
t-sql ×1