我想通过 sales 表进行月度销售,但是我使用 time()格式
存储日期数据示例:
UserID | Product | Date
1 | Hot Dog | 1504363230
4 | Chicken | 1504695631
1 | Potato | 1504761716
3 | Spinach | 1505003789
因此,如何在不将Date替换为 date()的情况下从那里创建月度销售?因为如果我要更改300K行,将花费很长时间
我该怎么办?
选择* FROM Sales WHERE用户ID =用户ID AND日期=?
输出必须是这样
最近一个月中的UserID 1做2笔交易,或者在此月中UserID 1做3笔交易 月份
答案 0 :(得分:0)
PHP解决方案是在date
函数中使用第二个参数:
let promisesArray = []
for(let i = 0; i < 10; i++){
const promise = db.ref(`/questions/en/${i}`).once('value');
promisesArray.push(promise)
}
return Promise.all(promisesArray)
.then((snapshotContainsArrayOfSnapshots) => {
let data = []
snapshotContainsArrayOfSnapshots.forEach((snapshot) => {
data.push(snapshot.val())
})
return JSON.stringify(data)
})
可选的timestamp参数是一个整数Unix时间戳,如果未提供时间戳,则默认为当前本地时间。换句话说,它默认为time()的值。
答案 1 :(得分:0)
编辑:
我认为这应该为您工作。我想您想避免使用PHP的date()
,但是MySQL的DATE()
可以。
SELECT
COUNT(*) AS nb_transaction,
UserID
FROM
sales
WHERE
DATE(`Date`) LIKE '2018-06-%'
当然,将月份替换为您要查找的月份。
FROM_UNIXTIME()
转换为任何格式:
FROM_UNIXTIME(`Date`, '%Y %D %M %h:%i:%s')
time()
函数返回一个UNIX Timestamp。
如果要使用一个日期显示日期,则可以使用DateTime::setTimestamp
:
$date = new DateTime();
$date->setTimestamp($row['Date']);
echo $date->format('Y-m-d H:i:s'); // Hot Dog = 2017-09-02 14:40:30
或者不久之后:
echo (new DateTime())->setTimestamp($row['Date'])->format('Y-m-d H:i:s');
答案 2 :(得分:0)
您可以使用FROM_UNIXTIME在MySQL中将unix时间戳转换为日期时间字符串。
SELECT FROM_UNIXTIME(`Date`) as `Datetime` FROM sales
然后您可以使用MONTH或YEAR等其他日期函数对此进行扩展
SELECT MONTH(FROM_UNIXTIME(`Date`)) as `Month` FROM sales
答案 3 :(得分:-1)
val cLevel = List("ceo","cfo")
val managerLevel = List("manager","team leader")
import org.apache.spark.sql.functions._
def rankUdf = udf((jobTitle: String) => jobTitle match {
case x if(cLevel.exists(_.contains(x)) || cLevel.exists(x.contains(_))) => "C-Level"
case x if(managerLevel.exists(_.contains(x)) || managerLevel.exists(x.contains(_))) => "manager"
case _ => "other"
})
df.withColumn("rank", rankUdf(col("job_title"))).show(false)
希望这会有所帮助